我有下一个问题:
当我从服务器接收日期时,我想通过datepicker格式化它,但是datepicker会抛出异常,因为它无法解析日期。
这是我的日期,来自服务器(obj.value):
08.20.2012 19:01:32
这是我试图解析这个日期的代码:
$.datepicker.formatDate('dd.MM.yy', new Date(obj.value));
我使用MM因为我需要月份的全名。
这是解析后的输出:
NaN.NaN.NaN
那么如何摆脱这种异常?
答案 0 :(得分:4)
您需要将日期(obj.value
)更改为有效的JavaScript日期格式。最好,如果你可以在服务器端。
如果您想在客户端进行此操作,则需要将.
替换为/
,以便获得08/20/2012 19:01:32
而不是08.20.2012 19:01:32
。
new Date(obj.value.replace(/\./g, '/'))
答案 1 :(得分:1)
您正在尝试使用JavaScript解析日期,这完全取决于实现。似乎许多浏览器无法解析您提供的字符串。你将不得不做两件事之一:
答案 2 :(得分:0)
Date()
仅收到integers
和strings
。在将obj传递给Date()
答案 3 :(得分:0)
如果您可以控制服务器返回的内容,目前最简单的方法是返回UNIX时间戳而不是格式化的日期字符串。
UNIX纪元和Javascript纪元是相同的(1970年1月1日00:00),但UNIX时间戳以秒为单位,而javascript的Date
对象以毫秒为单位。
所以:
$.datepicker.formatDate('dd.MM.yy', new Date(obj.value * 1000));
如您所见 HERE ,obj.value可以是整数或字符串。在字符串的情况下,javascript的自动类型转换会查看乘法。
答案 4 :(得分:0)
首先,您需要将传入的日期字符串重新格式化为可通过javascript Date()函数解析的内容。如果您无法控制来自您服务器的格式,我会建议
var incDate, dateString, timeString, dateSplit, timeSplit;
incDate = obj.value.split(" ");
dateString = incDate[0];
timeString = incDate[1];
dateSplit = dateString.split(".");
timeSplit = timeString.split(":");
$.datepicker.formatDate('dd.MM.yy', new Date(dateSplit[2],dateSplit[0]-1,dateSplit[1],timeSplit[0],timeSplit[1],timeSplit[2]));