Javascript 正在尝试使用new date()分析日期。但是不断得到错误的结果
我试图使用new date()解析通过ajax调用从php获得的一个日期字符串(目前与此无关) 然而,我总是得到错误的结果 我的字符串是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()指定日期格式 我当前的解决方案
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日期格式的参考
$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@NetaMeta4
是正确的月份号。索引从0
开始,因此0
是一月,而4
是五月。无论您给它什么日期字符串,都会出现这种情况(如果希望它反映现实生活中的月数,只需添加1)。mdn是查找此类信息的一个很好的资源:@NetaMeta很简单:var month=something.getMonth()+1代码>
$something = new DateTime('NOW');
echo $something->format('c');
echo $something->format(DateTime::ATOM);