我正在尝试重新格式化字符串日期,如下所述:
'25th May 1912' → 1912-05-2
我尝试使用Date.parse(),但是会引发错误。
有什么建议吗?
谢谢
答案 0 :(得分:4)
JavaScript的built-in date parsing is very limited,它不支持许多格式。
如上面链接的文档所建议,除非有理由(页面加载时间等),否则我将使用库来解析此格式,例如momentjs。
我认为以下内容将对其进行解析和重新格式化:
moment("25th May 1912", "Do MMM YYYY").format("YYYY-MM-DD");
还将解析“ 1912年5月21日”之类的变体,这些变体可能会导致简单的手动滚动实现中出现错误。
使用库有助于避免您可能不会想到的错误,并避免在您的应用程序中出现讨厌的,难以阅读的字符串黑客代码。
答案 1 :(得分:1)
console.log( parse('25st May 1912') )
console.log( parse('2nd September 2018') )
console.log( parse('6th January 2015') )
function parse(str) {
let replaced = str.replace(/(th|st|nd|rd)/, '')
let date = new Date(Date.parse(replaced))
return date.toISOString().slice(0, 10)
}
答案 2 :(得分:1)
您应该从日期中删除th
,Date.parse
会因此而返回NaN
。
这应该起作用:
var input = '25th May 1912';
var validInput = input.replace(/(th|st|nd|rd)/, '');
var dateObj = new Date(Date.parse(validInput))
console.log(dateObj.getFullYear() + '-' + ('0' + (dateObj.getMonth()+1)).slice(-2) + '-' + ('0' + dateObj.getDate()).slice(-2));