如何在 JavaScript 中将字符串转换为 Date 对象?
var st = "date in some format"
var dt = new Date();
var dt_st = // st in Date format, same as dt.
如何在 JavaScript 中将字符串转换为 Date 对象?
var st = "date in some format"
var dt = new Date();
var dt_st = // st in Date format, same as dt.
字符串解析的最佳字符串格式是日期 ISO 格式和 JavaScript 日期对象构造函数。
ISO 格式示例:YYYY-MM-DD
或YYYY-MM-DDTHH:MM:SS
.
可是等等! 仅使用“ISO 格式”本身并不能可靠地工作。字符串有时被解析为 UTC,有时被解析为本地时间(基于浏览器供应商和版本)。最佳实践应始终将日期存储为 UTC,并将计算作为 UTC。
要将日期解析为 UTC,请附加Z - 例如:new Date('2011-04-11T10:20:30Z')
。
要以 UTC 显示日期,请使用.toUTCString()
,
要以用户本地时间显示日期,请使用.toString()
。
对于旧的 Internet Explorer 兼容性(小于 9 的 IE 版本不支持 Date 构造函数中的 ISO 格式),您应该将日期时间字符串表示拆分为它的部分,然后您可以使用使用日期时间部分的构造函数,例如: 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}
function stringToDate(_date,_format,_delimiter)
{
var formatLowerCase=_format.toLowerCase();
var formatItems=formatLowerCase.split(_delimiter);
var dateItems=_date.split(_delimiter);
var monthIndex=formatItems.indexOf("mm");
var dayIndex=formatItems.indexOf("dd");
var yearIndex=formatItems.indexOf("yyyy");
var month=parseInt(dateItems[monthIndex]);
month-=1;
var formatedDate = new Date(dateItems[yearIndex],month,dateItems[dayIndex]);
return formatedDate;
}
stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")
moment.js ( http://momentjs.com/ ) 是一个完整的使用日期包并且支持ISO 8601 字符串。
您可以添加字符串日期和格式。
moment("12-25-1995", "MM-DD-YYYY");
您可以检查日期是否有效。
moment("not a real date").isValid(); //Returns false
一些显示示例
let dt = moment("02-01-2019", "MM-DD-YYYY");
console.log(dt.fromNow()+' |'+dt.format('LL'))
// output: "3 months ago | February 1, 2019"
请参阅文档 http://momentjs.com/docs/#/parsing/string-format/
建议:我建议使用包含很多格式的日期的包,因为时区和格式时间管理真的是一个大问题,moment js解决了很多格式。您可以轻松地从一个简单的字符串解析日期,但我认为这是一项艰巨的工作,可以支持所有格式和日期变体。