这个日期时间格式有简单的转换方法吗?

3

我正在使用jQuery从JSON数据源检索数据,而在数据源中,我获得了像“2009-07-01 07:30:09”这样的“datetime”属性。我想将此信息放入javascript Date对象中以便轻松使用,但我不认为Date对象会识别此类格式,如果我只是将其插入构造函数中。是否有一种函数或可能使用的巧妙技巧来快速将此格式分解为Date对象可以识别和使用的内容?


是的,这似乎是一种格式,即使Date对象尝试解析它,也无法识别。考虑到属性的实际名称是“datetime”,并且在谷歌搜索时会出现许多MS和VB引用,我猜测它是某种VB或.NET生成的时间戳。 - Mathias Schnell
1
该字符串不是有效的日期格式。它没有指定时区,可能是中国或意大利或其他地方。这意味着开发人员需要知道(通过文档猜测)所隐含的时区。尝试用“T”替换空格,并解析它:2009-07-01T07:30:09。这样做可以使用正则表达式轻松完成。 - Alex Bagnolini
javascript:alert(Date(Date.parse("2009-07-01T07:30:09"))); 在 Google Chrome(Linux Beta)中错误地返回当前时间和日期。 - anshul
当我这样做时,它运行得很好。虽然我无法弄清楚需要将空格转换为T的正则表达式。我讨厌正则表达式,我完全不理解它们。 - Mathias Schnell
显示剩余4条评论
4个回答

3

请参见此处此处

input = "2009-07-01 07:30:09";
var res =  input.match(/([\d\-]+) (\d+):(\d+):(\d+)/);
date = new Date(Date.parse(res[1])); 
date.setHours(res[2]);
date.setMinutes(res[3]);
date.setSeconds(res[4]);
console.log(date);

编辑:我的原始回答是

t = new Date(Date.parse("2009-07-01 07:30:09"));

在谷歌浏览器中没有出现任何错误,但是日期解析仍然不正确,这让我感到困扰。看来,Date.parse确实有点不稳定,使用它来解析完整的日期和时间可能不太可靠。

编辑2:DateJS似乎是解析文本转换为日期时的好解决方案,但大小达25 kb,对于非正式使用有些沉重。


刚在火狐浏览器中测试,结果显示“无效日期”。 - Alex Bagnolini
不行。尝试使用以下代码...$('#date').html(t.getMonth() + '/' + t.getDay()); 结果输出...NaN/NaN - Mathias Schnell
是的...在Firefox中,Date.parse无法处理整个字符串,并且在最新的Linux Chrome Beta中返回了“now”,这正是我最初测试它的地方。感谢您指出这一点。 - anshul

3
从该 Web 服务中检索到的 "date" 属性并不是真正的 Date,因为它不是一种被认可的日期格式。
将空格替换为 "T" 是将其处理为 Date 对象的最简单方法:
var receivedDate = "2009-07-01 07:30:09";
var serializedDate = new Date(receivedDate.replace(" ", "T"));
alert(serializedDate);

这并不是最正确的做法,因为它没有处理时区,但在大多数情况下都可以使用。


我尝试过这个,但出于某些原因它不能工作。空格还是保持为空格。 - Mathias Schnell
没事了,它可以工作。我以为replace()会影响到它所调用的字符串,而不是返回替换后的结果。不确定哪种语言可以/会这样做,但我知道有些时候我会混淆不同语言之间的东西。 - Mathias Schnell

0
这可能有点繁琐,但是JavaScript的Date对象将接受一个参数列表YYYY,MM,DD,HH,MM,SS。解析出日期值并传递给Date构造函数,例如:
var splitDT= '2009-07-01 07:30:09'.split(' '); // ['2009-07-01','07:30:09']
var d= splitDT[0].split('-');
var t= splitDT[1].split(':');
alert( (new Date(d[0],d[1],d[2],t[0],t[1],t[2])) );       

啊。不得不使用数组索引值了。嗯,有点乱。但是能用就行。

0

var str = "2009-07-01 07:30:09";

这取决于时区,以及日期字符串是否减去了一个月。

如果是GMT时间,并且07代表7月而不是8月:

var str = "2009-07-01 07:30:09";

var d=new Date(), time;
str=str.split(/\D0?/);
str[1]-=1;
time=str.splice(3);
d.setUTCFullYear.apply(d,str);
d.setUTCHours.apply(d,time)
alert(d)

/* 返回值:(日期) 2009年7月1日 星期三 03:30:09 GMT-0400(美国东部夏令时)或当地等效时间 */


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接