Javascript日期解析帮助

4

我正在使用Javascript的Date.parse()来检查开始时间是否在结束时间之后。

所涉及的时间格式如下:

Date.parse("12:00pm") > Date.parse("9:30pm")

在Chrome中,这会显示为false(正如应该的那样)

在IE中,它错误地显示为true。

Chrome看到的值是:

Thu Jul 22 2010 12:00:00 GMT-0400 (Eastern Daylight Time)
Thu Jul 22 2010 21:30:00 GMT-0400 (Eastern Daylight Time)

IE所看到的值是:
Thu Jul 22 12:00:00 EDT 2010
Thu Jul 22 09:30:00 EDT 2010

我该如何使IE正常工作?

更新

好的,这只发生在IE7中。此外,我现在看到IE7没有获取存储在SELECT框中并通过以下方式检索的am / pm:

var startMerid = document.getElementById("start_time_ampm").options[document.getElementById("start_time_ampm").selectedIndex].value;

我的选择是这样的:

<option>am</option>

但我改为:

<option value="am">am</option>

现在它可以正常工作了。


你在测试哪个版本的IE?在IE8中使用Date.parse()会得到NaN,这是我在旧版本中预期的结果,因为Date.parse()在IE中的工作方式。当然,NaN > NaN将始终为false。 - Andy E
如果你看我的更新,我找到了错误,它与Date.parse无关,实际上是我接收AM/PM的方式有问题。在这种答案与原问题无关的情况下...SO最好的做法是什么?我应该把它作为回答并接受吗?还是编辑我的问题...或者其他什么? - JD Isaacks
如果解决方案与问题无关,最好的方法可能就是删除该问题。您可以通过单击标签下方的删除链接来执行此操作。另外,FYI document.getElementById("start_time_ampm").value 就足够了,不需要获取 selectedIndex - Andy E
@Andy 谢谢你提供的信息,我点击了删除按钮,但是它显示“抱歉,这个问题无法被删除:已有太多回答或者已经有赞同/采纳的答案”。既然我认为你的回答最好地回答了我的问题,我就将其标记为被采纳的答案。 - JD Isaacks
3个回答

0

你不能把时间直接传递给Date.parse(),因为它期望一个日期字符串。如果你把代码中的>翻转成<,你会注意到它仍然返回false。这是因为Date.parse()返回NaN

试试这个:

var a = new Date("January 1, 1970 12:00:00");
var b = new Date("January 1, 1970 21:30:00");

if (a > b) { alert(true); } else { alert(false); }
if (a < b) { alert(true); } else { alert(false); }

0
你正在测试哪个版本的IE?对我来说,IE8正确返回false。

这是关于编程的内容。IT是IE7,错误在于我如何检索字符串中的AM / PM部分。请查看我的更新。 - JD Isaacks

0

IE中Date.parse()的文档说明如下:

如果使用24小时制,则对于12点后的时间指定“PM”是错误的。例如,“23:15 PM”是错误的。

为了实现跨浏览器解决方案,您应该避免使用parse()并手动解析时间字符串。或者,您可以使用一个跨浏览器的日期/时间解析库 - DateJS 是一个流行的选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接