【发布时间】:2009-12-02 16:04:56
【问题描述】:
我有一个带有日期的字符串,格式如下:YYYYMMDDHHMMSS。我想知道如何使用 JavaScript 将其转换为 JavaScript Date 对象。
提前致谢!
【问题讨论】:
标签: javascript datetime date
我有一个带有日期的字符串,格式如下:YYYYMMDDHHMMSS。我想知道如何使用 JavaScript 将其转换为 JavaScript Date 对象。
提前致谢!
【问题讨论】:
标签: javascript datetime date
用一种古怪的方式来做这件事怎么样:
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 月份是零索引的。你仍然可以用类似的方法来做,但是会有一个中间步骤,在将数组传递给构造函数之前从数组中减去一个。我把它留在这里了,因为它是在 cmets 中被问到的。
但是,另一个选项按预期工作。
【讨论】:
Date() 作为函数调用(即没有new)总是返回一个字符串表示当前时间;引用:“提供的任何参数都被接受但完全被忽略”
apply() 的参数即使有效也是错误的:正确的用法是 Date.apply(null, myStr.match(/.../).slice(1))
Date.apply 确实如我所愿。
原始版本:
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() 函数会为您完成这项工作。
【讨论】:
我发现DateJS 是处理与 JavaScript 中的日期转换、解析和使用有关的任何事情的最佳库。如果您更频繁地需要这种转换,您真的应该考虑在您的应用程序中使用它:
Date.parseExact("20091202051200", "YYYYMMDDHHMMSS");
【讨论】:
如果你可以使用 jQuery,jQuery.ui.datepicker 有一个实用程序 function。
【讨论】:
这个库中的日期函数可以提供帮助:http://javascripttoolbox.com/lib/date/,它是免费的并且使用起来非常简单。
如果你想自己做,我建议查找 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)
*/
【讨论】: