我在2000年1月1日之后解析日期时遇到问题。结果错误地返回。 1999年被解析为1999年,当它到达2000年它将其解析为0100,然后2001解析为0101等。以下是用于说明此问题的测试代码:
<script type="text/javascript" language="javascript">
// functions incorrect changes year from 2010 to 0101
var d = (new Date("12/01/2009"));
if (d.getMonth() < 11)
{ d = new Date(d.getYear(), d.getMonth() + 1, 1); }
else
{ d = new Date(d.getYear() + 1, 0, 1); }
document.write(d);
// Result: Sat Jan 01 0101 00:00:00 GMT-0500 (Eastern Standard Time)
document.write('<br />');
document.write(Date.parse(Date()) < Date.parse(d));
//
// Result: false today should definitely be < 01/01/2010
document.write('<br />');
// Functions correctly if year is before 2000
var d = (new Date("12/01/1998"));
if (d.getMonth() < 11)
{ d = new Date(d.getYear(), d.getMonth() + 1, 1); }
else
{ d = new Date(d.getYear() + 1, 0, 1); }
document.write(d);
// Result: Fri Jan 01 1999 00:00:00 GMT-0500 (Eastern Standard Time)
document.write('<br />');
document.write(Date.parse(Date()) < Date.parse(d));
// false
</script>
答案 0 :(得分:5)
您需要使用d.getFullYear()而不是d.getYear()
getYear()仅给出自1900年以来的年数,显然;)
答案 1 :(得分:2)
您应该使用Date.parse()
。您看到奇怪结果的部分原因是因为您在顶部使用new Date("12/01/2009")
并将其他所有内容进行比较。请注意,Date.parse()
返回一个数字,而不是日期对象。因此,为您的第一个任务执行此操作:
var d = new Date(Date.parse("12/01/2009"));
下一部分是您需要getFullYear()
功能,而不仅仅是getYear()
,尽管您的问题仅存在于验证码中,而不是您实际解析日期的方式。
答案 2 :(得分:0)
getYear()返回的内容取决于浏览器。请尝试使用d.getFullYear()。
合理的Javascript日期参考:http://www.w3schools.com/jsref/jsref_obj_date.asp