将格式为YYYYMMDDHHMMSS的字符串转换为JavaScript Date对象

Joh*_*nes 4 javascript datetime date

我有一个字符串,其日期格式如下:YYYYMMDDHHMMSS.我想知道如何使用JavaScript将其转换为JavaScript Date对象.

提前致谢!

nic*_*ckf 10

这是一个古怪的方法来做到这一点:

var date = new Date(myStr.replace(
    /^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/,
    '$4:$5:$6 $2/$3/$1'
));
Run Code Online (Sandbox Code Playgroud)

零外部库,一行代码;-)


原方法说明:

// EDIT: this doesn't work! see below.
var date = Date.apply(
    null,
    myStr.match(/^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/).slice(1)
);
Run Code Online (Sandbox Code Playgroud)

match()函数(在slice()d包含右侧之后)将返回一个包含年,月,日,小时,分钟和秒的数组.这恰好是Date构造函数的正确顺序.Function.apply是一种使用数组中的参数调用函数的方法,所以我使用了Date.apply(<that array>).

例如:

var foo = function(a, b, c) { };

// the following two snippets are functionally equivalent
foo('A', 'B', 'C')

var arr = ['A', 'B', 'C'];
foo.apply(null, arr);
Run Code Online (Sandbox Code Playgroud)

我刚刚意识到这个函数实际上并不起作用,因为javascript月份是零索引的.你仍然可以用类似的方法来做,但是有一个中间步骤,在将数据传递给构造函数之前从数组中减去一个.我把它留在了这里,因为它在评论中被问到了.

另一种选择按预期工作.

  • 第一个版本不起作用:根据ECMA-262,第3版,第15.9.2节,调用`Date()`作为函数(即没有`new`)总是返回**当前时间的字符串表示**; 引用:"提供的任何参数都被接受但完全被忽略" (2认同)

Chr*_*oph 5

原始版本:

new Date(foo.slice(0, 4), foo.slice(4, 6) - 1, foo.slice(6, 8),
    foo.slice(8, 10), foo.slice(10, 12), foo.slice(12, 14))
Run Code Online (Sandbox Code Playgroud)

字符串到数字的显式转换是不必要的:Date()函数会为你做这件事。