我有一个字符串,其中包含以下格式的日期时间
2016-07-30 00:00:01.0310000
我需要将它转换为JavaScript中的datetime对象,保留sub-seconds。
如果我使用
var d = new Date('2016-07-30 00:00:01.0310000');
01之后的所有内容都被删除了,我怎样才能有效地实现这一目标呢?
答案 0 :(得分:1)
您必须自己解析字符串(这很简单,唯一棘手的位是在毫秒值上尾随零)并使用Date(years, months, days, hours, minutes, seconds, milliseconds)
构造函数构建日期。或者使用库和格式字符串。
以下是一个例子:
var str = "2016-07-30 00:00:01.0310000";
var parts = /^\s*(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})\.(\d+)\s*$/.exec(str);
var dt = !parts ? null : new Date(
+parts[1], // Years
+parts[2] - 1, // Months (note we start with 0)
+parts[3], // Days
+parts[4], // Hours
+parts[5], // Minutes
+parts[6], // Seconds
+parts[7].replace(/0+$/, '') // Milliseconds, dropping trailing 0's
);
if (dt.toISOString) {
console.log(dt.toISOString());
} else {
console.log("date", dt.toString());
console.log("milliseconds", dt.getMilliseconds());
}

在正则表达式中,\d
表示"数字"并且{x}
表示"重复x次"。
!parts ? null : new Date(...)
位是这样的,如果字符串与格式不匹配,我们会得到null
而不是错误。
答案 1 :(得分:-1)
毫秒被保存(31),但之后的内容未保存,因为javascript不支持它。
答案 2 :(得分:-1)
你可以像Moment JS一样使用库,你可以阅读更多http://momentjs.com/docs/
var day = moment("2016-07-30 00:00:01.0310000");
console.log(day._d); // Sat Jul 30 2016 00:00:01 GMT+0100 (WAT)