JavaScript将字符串转换为日期时间

时间:2016-06-12 17:12:24

标签: javascript datetime casting

我有一个字符串,其中包含以下格式的日期时间

2016-07-30 00:00:01.0310000

我需要将它转换为JavaScript中的datetime对象,保留sub-seconds。

如果我使用

var d = new Date('2016-07-30 00:00:01.0310000');

01之后的所有内容都被删除了,我怎样才能有效地实现这一目标呢?

3 个答案:

答案 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)