我有下一个问题:当我从服务器接收日期时,我想通过 datepicker 对其进行格式化,但是 datepicker 抛出异常,因为它无法解析日期。这是我的日期,它来自服务器(obj.value):
08.20.2012 19:01:32
这是我尝试解析此日期的代码:
$.datepicker.formatDate('dd.MM.yy', new Date(obj.value));
我使用 MM 因为我需要月份的全名。这是解析后的输出:
NaN.NaN.NaN
那么如何摆脱这个异常呢?
5 回答
您需要将日期 ( obj.value
) 更改为有效的 JavaScript 日期格式。最好能在服务器端做。
如果您想在客户端执行此操作,则需要替换.
为,/
以便获得08/20/2012 19:01:32
而不是08.20.2012 19:01:32
.
new Date(obj.value.replace(/\./g, '/'))
您正在尝试在 JavaScript 中解析日期,这完全取决于实现。似乎许多浏览器无法解析您提供的字符串。您将不得不做以下两件事之一:
- 提供一个有效的字符串。
- 调用 Date 构造函数。
另请参阅此答案:为什么 Date.parse 给出不正确的结果?
Date()
接收integers
且strings
仅。您应该在将 obj 的值传递给之前对其进行处理Date()
如果您可以控制服务器返回的内容,那么迄今为止最简单的方法是返回 UNIX 时间戳而不是格式化的日期字符串。
UNIX 纪元和 Javascript 纪元相同(1970 年 1 月 1 日 00:00),但 UNIX 时间戳以秒为单位,而 javascript 的Date
对象以毫秒为单位。
所以 :
$.datepicker.formatDate('dd.MM.yy', new Date(obj.value * 1000));
如您所见, obj.value可以是整数或字符串。在字符串的情况下,javascript 的自动类型转换会处理乘法。
首先,您需要将传入的日期字符串重新格式化为可由 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]));