3

我有下一个问题:当我从服务器接收日期时,我想通过 datepicker 对其进行格式化,但是 datepicker 抛出异常,因为它无法解析日期。这是我的日期,它来自服务器(obj.value): 08.20.2012 19:01:32 这是我尝试解析此日期的代码: $.datepicker.formatDate('dd.MM.yy', new Date(obj.value)); 我使用 MM 因为我需要月份的全名。这是解析后的输出: NaN.NaN.NaN 那么如何摆脱这个异常呢?

4

5 回答 5

4

您需要将日期 ( obj.value) 更改为有效的 JavaScript 日期格式。最好能在服务器端做。

如果您想在客户端执行此操作,则需要替换.为,/以便获得08/20/2012 19:01:32而不是08.20.2012 19:01:32.

new Date(obj.value.replace(/\./g, '/'))
于 2012-08-21T10:33:03.640 回答
1

您正在尝试在 JavaScript 中解析日期,这完全取决于实现。似乎许多浏览器无法解析您提供的字符串。您将不得不做以下两件事之一:

  • 提供一个有效的字符串。
  • 调用 Date 构造函数。

另请参阅此答案:为什么 Date.parse 给出不正确的结果?

于 2012-08-21T10:34:27.693 回答
0

Date()接收integersstrings仅。您应该在将 obj 的值传递给之前对其进行处理Date()

于 2012-08-21T10:32:42.143 回答
0

如果您可以控制服务器返回的内容,那么迄今为止最简单的方法是返回 UNIX 时间戳而不是格式化的日期字符串。

UNIX 纪元和 Javascript 纪元相同(1970 年 1 月 1 日 00:00),但 UNIX 时间戳以秒为单位,而 javascript 的Date对象以毫秒为单位。

所以 :

$.datepicker.formatDate('dd.MM.yy', new Date(obj.value * 1000));

如您所见, obj.value可以是整数或字符串。在字符串的情况下,javascript 的自动类型转换会处理乘法。

于 2012-08-21T10:39:07.477 回答
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]));
于 2012-08-21T11:02:48.640 回答