JavaScript不会解析GMT日期/时间格式

时间:2009-08-20 20:47:37

标签: javascript datetime date

我正在尝试让JavaScript为我解析日期和时间格式,最终目的是告诉我自该日期以来的日子和现在(本地)的时间。

不幸的是,我必须使用的日期格式(它来自我无法控制的JSON响应)以2008-10-01 06:21:43类型格式返回它。

var thedate = "2008-10-01 06:21:43";
var inmillisecs = new Date(thedate);

这只会从JavaScript返回一个错误,告诉我日期无效。

如何解决此问题?

6 个答案:

答案 0 :(得分:8)

这应该这样做

function dateFromUTC( dateAsString, ymdDelimiter )
{
  var pattern = new RegExp( "(\\d{4})" + ymdDelimiter + "(\\d{2})" + ymdDelimiter + "(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})" );
  var parts = dateAsString.match( pattern );

  return new Date( Date.UTC(
      parseInt( parts[1] )
    , parseInt( parts[2], 10 ) - 1
    , parseInt( parts[3], 10 )
    , parseInt( parts[4], 10 )
    , parseInt( parts[5], 10 )
    , parseInt( parts[6], 10 )
    , 0
  ));
}

alert( dateFromUTC( "2008-10-01 06:21:43", '-' ) );

答案 1 :(得分:3)

这个漂亮的图书馆名为DateJS。我对它没有经验,但你可能会发现它很有用。我认为您对parse()和/或parseExact()特别感兴趣。

我最初是从this SO post听到的。

干杯。

编辑:我刚刚注意到你提到的时间,我不确定DateJS会处理时间,所以我会快速调查一下,否则你可以忽略这篇文章:)

答案 2 :(得分:2)

预期格式为美国格式:m/d/yyyy hh:mm:ss

var date1 = new Date("2008-10-01 06:21:43"); //fails
var date2 = new Date("10/1/2008 06:21:43"); //works correctly

答案 3 :(得分:1)

这是一个ISO 9601日期 - 它们是一个很好的标准。尝试使用正则表达式对其进行修改:

(\d{4})-(\d{2})-(\d{2})[ tT](.*)

\2/\3/\1 \4

答案 4 :(得分:0)

正确的语法应该是:

    var thedate = "Oct 1, 2008 06:21:43";
    var inmillisecs = new Date(thedate);

您必须采取一些步骤将您收到的String转换为我显示的格式。使用美国格式也可以

   var thedate = "10/1/2008 06:21:42";
   var inmillisecs = new Date(thedate);

答案 5 :(得分:-1)

它必须是parse()函数可识别的字符串。

http://www.devguru.com/technologies/javascript/10585.asp查看dateString param