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

将字符串格式的YYYYMMDDHHMMSS转换为JavaScript日期对象,javascript,datetime,date,Javascript,Datetime,Date,我有一个带日期的字符串,格式如下:YYYYMMDDHHMMSS。我想知道如何使用JavaScript将其转换为JavaScript日期对象 提前谢谢 对于与JavaScript中的日期转换、解析和使用相关的任何内容,我都能找到最好的库。如果你经常需要这种转换,你应该考虑在你的应用程序中使用它: Date.parseExact("20091202051200", "YYYYMMDDHHMMSS"); 此库中的日期函数可以帮助:,它是免费的,使用非常简单 如果您想自己做,我建议您查找javascr

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

提前谢谢

对于与JavaScript中的日期转换、解析和使用相关的任何内容,我都能找到最好的库。如果你经常需要这种转换,你应该考虑在你的应用程序中使用它:

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

此库中的日期函数可以帮助:,它是免费的,使用非常简单


如果您想自己做,我建议您查找javascript正则表达式,因为我想这是实现这一目标的最佳方法

如果您可以使用jQuery,jQuery.ui.datepicker有一个实用工具。

这是一种奇怪的方法,如何实现呢:

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转换为只包含右边内容后)将返回一个包含年、月、日、小时、分钟和秒的数组。这恰好是日期构造函数的正确顺序
Function.apply
是一种使用数组中的参数调用函数的方法,所以我使用了
Date.apply()

例如:

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月份是零索引的。您仍然可以使用类似的方法来实现,但需要一个中间步骤,在将数组传递给构造函数之前从数组中减去一个。我把它放在这里了,因为在评论中有人问过它


另一个选项按预期工作。

字符串中没有时区信息。 最有可能是格林尼治标准时间,所以应该考虑到这一点 当你确定日期的时候。您可以使用简单的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)
*/
原始版本:

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()
函数将为您执行此操作。

您能解释第一种情况下的情况吗?“申请”是干什么的?我就是这么做的。除非您需要一系列其他的日期处理,否则这些外部LIB是多余的。第一个版本不应该工作:根据ECMA-262,第三版,第15.9.2节,调用
date()
作为函数(即不使用
new
)总是返回当前时间的字符串表示形式;quote:“提供的任何参数都被接受,但被完全忽略。”
apply()
的参数即使有效也会出错:正确的用法应该是
Date.apply(null,myStr.match(/…/).slice(1))
@Christoph:yep,你是对的。即使在那时,这种方法也存在其他问题。在我的(显然是简短的)测试中,
Date.apply
确实像我希望的那样工作。