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

时间:2009-12-02 16:04:56

标签: javascript datetime date

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

提前致谢!

6 个答案:

答案 0 :(得分:8)

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

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

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


原始方法说明:

// 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)
);

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);

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

其他选项按预期工作。

答案 1 :(得分:4)

原始版本:

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

不需要将字符串显式转换为数字:Date()函数将为您执行此操作。

答案 2 :(得分:3)

我发现DateJS是与JavaScript中转换,解析和使用日期有关的最佳库。如果您需要更频繁地进行这种转换,那么您应该考虑在应用程序中使用它:

Date.parseExact("20091202051200", "YYYYMMDDHHMMSS");

答案 3 :(得分:1)

如果你可以使用jQuery,jQuery.ui.datepicker有一个实用程序function

答案 4 :(得分:0)

此库中的日期函数可以提供帮助:http://javascripttoolbox.com/lib/date/,它是免费的,使用起来非常简单。

如果您想自己动手,我建议查找javascript正则表达式,因为我猜这是达到最佳效果的方法

答案 5 :(得分:0)

您的字符串中没有时区信息。 它很可能是GMT,所以应该考虑到这一点 当你做日期。您可以使用简单的JavaScript方法轻松完成转换。

Date.Brit= (function(){
    return Date.parse('2/6/2009')> Date.parse('6/2/2009');
})()


var s= "20091202093000"
var D= s.match(/(\d{2})/g);
if(Date.Brit){
    D.splice(2, 2, D[3],D[2]);
}
var day= new Date(Date.parse(D[2]+'/'+D[3]+'/'+
D[0]+D[1]+' '+D.splice(4).join(':')+' GMT'));

day.toUTCString()+'\n'+day


/*  returned value: (String)
Wed, 02 Dec 2009 09:30:00 GMT
Wed Dec 02 2009 04:30:00 GMT-0500 (Eastern Standard Time)
*/