在date.js中对中午和午夜的混淆

Confusion over noon versus midnight with date.js

本文关键字:午夜 date js      更新时间:2023-09-26

我在我的项目中使用date.js,我遇到了一些我没有预料到的关于日期的时间组件恰好是中午或午夜。

当我使用原生javascript Date.parse方法时,我得到了解析日期时所期望的结果:

// plain old javascript
var date = new Date(Date.parse("10/21/2010 12:00:00 PM"));
alert(date);

我得到这个:

2010年10月21日星期四12:00:00 GMT-0500(中央夏令时)

我将此解释为2010年10月21日中午,这是我认为我的输入日期。然而,当我导入date.js并尝试类似的东西时,

// using date.js
var date = Date.parseExact("10/21/2010 12:00:00 PM", "M/d/yyyy hh:mm:ss tt");
alert(date);

我得到这个:

星期五2010年10月22日00:00:00 GMT-0500(中央夏令时)

这看起来像是第二天的午夜。我不知道为什么它会把这个解释为午夜,或者至少为什么它的解释与javascript中的默认Date.parse不同。我是否对12:00 PM的含义感到困惑?我是否滥用了date.js的parseExact?

看起来像是版本问题:

http://jsfiddle.net/4QK8Q/
http://jsfiddle.net/JKg3n/

第一个是你的文件(来自google代码库),第二个是他们的网站(datejs.com)。有趣的是,它们看起来像是同一个版本,但显然不是。我对这个库不太熟悉,不知道发生了什么,但我建议提交一个bug报告。

这是一个相当老的问题,但是对于那些可能在搜索中偶然发现这个问题的人来说,如果遇到意外行为,强烈建议您切换到当前维护的Date.js版本(https://github.com/abritinthebay/datejs/)。

Google代码库和datejs.com上的版本都有未修复的错误,这些错误不太可能被解决,因为最初的开发人员似乎已经放弃了这个项目。