我有一个包含DateTime为"20140121230000"的字符串。如果我尝试将其转换为日期。
var oDate = new Date(20140121230000);
我得到的年份是2068年!是否有办法将其转换为2014年01月21日时间23:00:00的日期?是否有可能在不做任何解析的情况下直接转换这个字符串?
除非使用库,否则没有办法在不手动分割字符串的情况下转换值。
var year = +oDate.slice( 0, 4);
var month = +oDate.slice( 4, 2) - 1; // Month is zero-based.
var day = +oDate.slice( 6, 2);
var hour = +oDate.slice( 8, 2);
var minute = +oDate.slice(10, 2);
var second = +oDate.slice(12, 2);
// This will interpret the date as local time date.
var date = new Date(year, month, day, hour, minute, second);
// This will interpret the date as UTC date.
var utcDate = Date.UTC(year, month, day, hour, minute, second);
您使用的构造函数从1970年1月1日起占用毫秒,尝试使用:
var oDate = new Date(2014, 01, 21, 23, 00, 00, 00);
注意,01月将是Feb,而不是jan
用字符串构造Date对象
new Date(string)
期望Date.parse
能够理解的日期字符串:
- ISO 8601(如
2011-10-10T14:48:00
)或 - RFC2822(例如,
Mon, 25 Dec 1995 13:30:00 GMT
)
有关Date和Date.parse的更多信息,请参阅MDN。
您的格式不被识别。
- 重新格式化字符串以适合上面的一种格式
- 手动分割字符串并使用单独的参数调用
Date
,如new Date(year, month, day, hour, minute, second, millisecond)
- 使用moment.js这样的库
使用moment.js将看起来像这样:
moment("20140121230000", "YYYYDDMMHHmmss")
有关格式语法的更多信息,请参阅moment.js string + format
给定'20140121230000'
,您可以将其拆分为位并将其提供给Date构造函数:
function parseSToDate(s) {
var b = s.match(/dd/g) || [];
return new Date( (b[0] + b[1]), --b[2], b[3], b[4], b[5], b[6]);
}
console.log(parseSToDate('20140121230000'));