如何将字符串转换为JavaScript日期对象?

var st = "date in some format"
var dt = new Date();

var dt_st = // st in Date format, same as dt.

当前回答

性能

今天(2020.05.08),我对所选解决方案进行了测试-有两种情况:输入日期是ISO8601字符串(Ad,Bd,Cd,Dd,Ed),输入日期是时间戳(At, Ct, Dt)。解决方案Bd,Cd,Ct不返回js Date对象作为结果,但我添加它们,因为它们可能是有用的,但我没有将它们与有效的解决方案进行比较。该结果对于大量数据解析非常有用。

结论

解决方案new Date (Ad)比moment.js (Dd)快50-100倍,适用于所有浏览器的ISO日期和时间戳 解决方案new Date (Ad)比parseDate (Ed)快10倍 解决方案date .parse(Bd)是最快的,如果我们需要在所有浏览器上从ISO日期获得时间戳

细节

我在MacOs High Sierra 10.13.6、Chrome 81.0、Safari 13.1、Firefox 75.0上进行测试。解决方案parseDate (Ed)使用新的Date(0)和手动设置UTC日期组件。

let ds = '2020-05-14T00:00Z'; // Valid ISO8601 UTC date let ts = +'1589328000000'; // timestamp let Ad = new Date(ds); let Bd = Date.parse(ds); let Cd = moment(ds); let Dd = moment(ds).toDate(); let Ed = parseDate(ds); let At = new Date(ts); let Ct = moment(ts); let Dt = moment(ts).toDate(); log = (n,d) => console.log(`${n}: ${+d} ${d}`); console.log('from date string:', ds) log('Ad', Ad); log('Bd', Bd); log('Cd', Cd); log('Dd', Dd); log('Ed', Ed); console.log('from timestamp:', ts) log('At', At); log('Ct', Ct); log('Dt', Dt); function parseDate(dateStr) { let [year,month,day] = dateStr.split(' ')[0].split('-'); let d=new Date(0); d.setUTCFullYear(year); d.setUTCMonth(month-1); d.setUTCDate(day) return d; } <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment-with-locales.min.js"></script> This snippet only presents used soultions

铬检测结果

其他回答

对于在js中转换字符串到日期,我使用http://momentjs.com/

moment().format('MMMM Do YYYY, h:mm:ss a'); // August 16th 2015, 4:17:24 pm
moment().format('dddd');                    // Sunday
moment().format("MMM Do YY");               // Aug 16th 15
moment().format('YYYY [escaped] YYYY');     // 2015 escaped 2015
moment("20111031", "YYYYMMDD").fromNow(); // 4 years ago
moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago
moment().startOf('day').fromNow();        // 16 hours ago
moment().endOf('day').fromNow();          // in 8 hours

只是新日期(st);

假设这是正确的格式。

ISO 8601式的数据字符串,尽管标准很优秀,但仍然没有得到广泛的支持。

这是一个很好的资源来找出你应该使用哪种datestring格式:

http://dygraphs.com/date-formats.html

是的,这意味着你的datestring可以简单的反对

“2014/10/13 23:57:52” 而不是 “2014-10-13 23:57:52”

你还可以: mydate.toLocaleDateString ();

日期。解析几乎可以得到你想要的。它在上午/下午部分窒息,但通过一些黑客你可以让它工作:

var str = 'Sun Apr 25, 2010 3:30pm',
    timestamp;

timestamp = Date.parse(str.replace(/[ap]m$/i, ''));

if(str.match(/pm$/i) >= 0) {
    timestamp += 12 * 60 * 60 * 1000;
}