0

我正在尝试使用 new Date() 解析我通过 ajax 调用(目前无关紧要)从 php 获得的日期字符串。

但是我不断得到错误的结果。

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

当我做

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

它一直在提醒 0

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

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

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

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

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

4

2 回答 2

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构造函数不能识别带有连字符的日期格式,或者至少不能识别那种特定的格式。

于 2013-05-23T16:17:53.090 回答
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); 
于 2013-05-23T18:01:15.000 回答