【发布时间】:2016-08-19 20:10:48
【问题描述】:
我在为我的网站解析日期时遇到问题。它曾经在 IE 和 Chrome 上运行良好(我还没有尝试过 Firefox)。但最近我无法在 chrome 上解析日期。
我从数据库中获取的日期字符串类似于“Oct 17 2016 12:00AM”
这是我用来调试问题的代码
console.log("String = "+item.DueDate);
console.log("new Date = " + new Date(item.DueDate));
console.log("Date Parse = " + Date.parse(item.DueDate));
console.log("Moment Parse = " + moment(item.DueDate));
这是 IE 返回的内容:
字符串 = 2016 年 10 月 17 日上午 12:00
新日期 = 2016 年 10 月 17 日星期一 00:00:00 GMT-0400(东部夏令时间)
日期解析 = 1476676800000
时刻解析 = 1476676800000
这是 Chrome 返回的内容:
字符串 = 2016 年 10 月 17 日上午 12:00
新日期 = 无效日期
日期解析 = NaN
Moment Parse = NaN
我在我的一个函数中使用 Date.parse() 来查找日期之间的差异:
function daydiff(first, second) {
return Math.round((second - first) / (1000 * 60 * 60 * 24));
}
var dif = daydiff(Date.parse(item.DueDate), Date.parse(item.DateShipped));
我应该如何处理我的日期字符串才能使其同时与 chrome 和 Internet Explorer 一起使用?
已修复
所以我通过更改我的 web api 调用来修复它以返回 DateTime 而不是字符串。
【问题讨论】:
-
跨浏览器问题在解析值时很常见。最好的办法是使用像 moment.js 这样的库来进行解析,它已经考虑了大部分(如果不是全部)浏览器变量。此外,这不是您希望日期时间在来自服务器时的样子。您可能希望改进它们的存储方式。
-
看起来 chrome 不喜欢 AM/PM 部分,您能否在将日期服务器端格式化为 UTC 后再将其发送回浏览器?更好的是,我建议只将日期作为 UTC 存储在您的数据库中。
-
将日期作为字符串存储在数据库中是一个坏主意,当您没有具有正确日期时间列的数据库时,SQL 查询是不可能的。
-
@QBM5;需要注意的是,moment.js 的最新版本要求您在从字符串中解析日期时传递格式字符串,这正是由于跨浏览器问题。
-
如果我添加一个空格,这适用于 chrome
new Date("Oct 17 2016 12:00 AM")
标签: javascript google-chrome date internet-explorer