协慌网

登录 贡献 社区

在 JavaScript 中将字符串转换为日期

如何在 JavaScript 中将字符串转换为日期?

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

var dt_st= //st in date format same as dt

答案

字符串解析的最佳字符串格式是日期 ISO 格式以及 JavaScript Date 对象构造函数。

ISO 格式的示例: YYYY-MM-DDYYYY-MM-DDTHH:MM:SS

可是等等!仅仅使用 “ISO 格式” 本身不能可靠地工作。字符串有时会解析为 UTC,有时会解析为本地时间(基于浏览器供应商和版本)。最佳做法应始终是将日期存储为 UTC 并进行计算为 UTC。

要将日期解析为 UTC,请附加Z ,例如: new Date('2011-04-11T10:20:30Z')

要以 UTC 显示日期,请使用.toUTCString()
要显示用户当地时间的日期,请使用.toString()

有关 MDN 的更多信息 | 日期这个答案

为了与旧版 Internet Explorer 兼容(小于 9 的 IE 版本在 Date 构造函数中不支持 ISO 格式),应将 datetime 字符串表示形式拆分为其各个部分,然后可以使用带 datetime 组成部分的构造函数,例如: new Date('2011', '04' - 1, '11', '11', '51', '00') 。请注意,月份数必须少 1。


替代方法 - 使用适当的库:

您还可以利用Moment.js库,该库允许解析具有指定时区的日期。

不幸的是我发现

var mydate = new Date('2014-04-03');
console.log(mydate.toDateString());

返回 “2014 年 4 月 2 日星期三”。我知道这听起来很疯狂,但某些用户会遇到这种情况。

防弹解决方案如下:

var parts ='2014-04-03'.split('-');
// Please pay attention to the month (parts[1]); JavaScript counts months from 0:
// January - 0, February - 1, etc.
var mydate = new Date(parts[0], parts[1] - 1, parts[2]); 
console.log(mydate.toDateString());

var st = "26.04.2013";
var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
var dt = new Date(st.replace(pattern,'$3-$2-$1'));

输出将是:

dt => Date {Fri Apr 26 2013}