Javascript 正在尝试使用new date()分析日期。但是不断得到错误的结果

Javascript 正在尝试使用new date()分析日期。但是不断得到错误的结果,javascript,date,strtotime,Javascript,Date,Strtotime,我试图使用new date()解析通过ajax调用从php获得的一个日期字符串(目前与此无关) 然而,我总是得到错误的结果 我的字符串是2013-05-09 20:56:17 当我这样做的时候 var something = new Date("2013-05-09 20:56:17"); alert(something.getMonth()); 它不断向0发出警报 在我看来,由于某种原因,new date无法解析此字符串 有没有办法在JS中为new date()指定日期格式 我当前的解决方案

我试图使用new date()解析通过ajax调用从php获得的一个日期字符串(目前与此无关)

然而,我总是得到错误的结果

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

当我这样做的时候

var something = new Date("2013-05-09 20:56:17");
alert(something.getMonth());
它不断向0发出警报

在我看来,由于某种原因,new date无法解析此字符串

有没有办法在JS中为new date()指定日期格式

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

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

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

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

var something = new Date("2013/05/09 20:56:17");
alert(something.getMonth());
如果需要(例如,如果您是从其他地方获取日期字符串),可以很容易地首先用斜杠替换字符串中的任何连字符:


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

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

var something = new Date("2013-05-09T20:56:17");
请注意“T”,它显示为文字分隔符,并根据ISO 8601标记时间的开始

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

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

注意“日期_ISO8601”;但我建议现在不要用这个。取而代之的是使用“DATE_ATOM”,这可能会产生一种更受广泛支持的日期格式(有评论称,这会让iPhone更快乐,而且与其他浏览器没有任何问题)

要在PHP中使用它,请执行以下操作:

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

您应该尝试使用moment.js()解析日期和时间。我打赌这会为您节省很多时间。我相信您使用的格式无法解析。请看一看:使用Chrome 26时,您的代码对我来说运行良好(警报为
4
,对应于五月,因为一月是
0
)。@asgm我测试它时,它对我不起作用。因此,我不会依赖这种跨浏览器。为了不依赖于任何实现可能实际解析或不解析的格式,您应该将unix时间戳值从PHP传递给JS,乘以1000(因为JS以微秒为单位处理时间戳),然后使用
new Date(123456789000)
。不,即使是
/
和sleshes,它也不起作用。当月份为05或09时,它返回4。。。所以没有。谢谢though@NetaMeta
4
是正确的月份号。索引从
0
开始,因此
0
是一月,而
4
是五月。无论您给它什么日期字符串,都会出现这种情况(如果希望它反映现实生活中的月数,只需添加1)。mdn是查找此类信息的一个很好的资源:@NetaMeta很简单:
var month=something.getMonth()+1
$something = new DateTime('NOW');
echo $something->format('c');
echo $something->format(DateTime::ATOM);