繁体   English   中英

为什么我的日期解析不正确?

[英]Why isn't my date parsing correctly?

我在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>

您需要使用d.getFullYear()而不是d.getYear()

getYear()仅给出自1900年以来的年数;

您应该使用Date.parse() 之所以会看到奇怪的结果,部分原因是因为您在顶部使用了new Date("12/01/2009")并将其他所有内容进行比较。 请注意, Date.parse()返回数字,而不是日期对象。 因此,对于您的第一个任务,请执行以下操作:

var d = new Date(Date.parse("12/01/2009"));

下一部分是您需要getFullYear()函数,而不仅仅是getYear() ,尽管您的问题仅存在于您的验证代码中,而不是您实际解析日期的方式中。

getYear()返回的内容取决于浏览器。 请尝试d.getFullYear()。

合理的Javascript日期参考: http : //www.w3schools.com/jsref/jsref_obj_date.asp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM