尝试使用新的Date()解析日期。但一直得到错误的结果

时间:2013-05-23 16:13:50

标签: javascript date strtotime

我正在尝试使用新的Date()来解析我通过ajax调用(现在与此无关)从php获取的日期字符串。

然而,我一直得到错误的结果。

我的字符串是2013-05-09 20:56:17

当我做的时候

var something = new Date("2013-05-09 20:56:17");
alert(something.getMonth());

它一直警告0

在我看来,由于某种原因,新日期无法解析此字符串。

有没有办法在JS中指定新Date()的日期格式?

我目前的解决方案是导入php:date()strtotime()并使用它们:

alert(date('m', strtotime("2013-05-09 20:56:17")));

但是我必须使用外部的js lib,我很确定有更好的JS方法来实现它。

2 个答案:

答案 0 :(得分:1)

如果使用斜杠而不是连字符,则可以使用:

var something = new Date("2013/05/09 20:56:17");
alert(something.getMonth());

如果需要,首先用斜杠替换字符串中的任何连字符都很容易(例如,如果你从其他地方获取日期字符串):

var something = new Date("2013-05-09 20:56:17");
something = something.replace('-', '/');

似乎JavaScript的Date构造函数无法识别带有连字符的日期格式,或者至少不能识别该特定格式。

答案 1 :(得分:0)

在PHP中为ajax日期选择不同的格式说明符。您期望的格式和javascript预期的格式是不同的。

var something = new Date("2013-05-09T20:56:17");

注意'T'显示为文字分隔符并标记每个ISO 8601的开始时间

各种[浏览器] javascript日期格式的参考

最后,PHP日期格式说明符列表:

注意'DATE_ISO8601';但我建议不要在此时使用它。而是使用'DATE_ATOM',它可以产生更广泛支持的日期格式(评论表明它使iPhone变得更快乐,并且没有其他浏览器的问题)。

在PHP中使用它:

$something = new DateTime('NOW');
echo $something->format('c');
echo $something->format(DateTime::ATOM);