Sax*_*man 2 javascript datetime date
这很奇怪我不知道我做错了什么.我有一个函数来获取日期(即以这种格式:),这06/24/2011是函数:
function checkDate(input){
var d = new Date();
var dspl = input.split("/");
if(dspl.length != 3)
return NaN;
d.setDate(dspl[1]);
d.setMonth(Number(dspl[0])-1);
if(dspl[2].length == 2)
d.setYear("20"+(dspl[2]+""));
else if(dspl[2].length == 4)
d.setYear(dspl[2]);
else
return NaN;
var dt = jsToMsDate(new Date(d));
return dt;
}
Run Code Online (Sandbox Code Playgroud)
如果我输入该月的任何日期,它将正确解析日期,但如果我输入31,即"01/31/2011",它将变为"01/01/2011".我不知道该怎么办,也不确定问题可能在哪里.
JavaScript的Date对象允许您提供无效的月和日组合; 它们会自动为您校正(例如,如果您将月份的日期设置为月份为6月的31日,则会自动将其设置为7月1日).这意味着如果您单独设置字段,您可以遇到自动纠正妨碍您的方式.
在您的情况下,如果您要设置所有这三个字段,最好使用Date接受它们作为参数的构造函数的形式:
var dt = new Date(year, month, day);
Run Code Online (Sandbox Code Playgroud)
(如果您需要小时,分钟,秒和毫秒,您也可以将它们添加为参数.)
所以看看你的代码,一个袖手旁观的更新:
function checkDate(input){
var year, month, day, d, dt;
var dspl = input.split("/");
if(dspl.length != 3)
return NaN;
year = parseInt(dspl[2], 10);
month = parseInt(dspl[0], 10) - 1;
day = parseInt(dspl[1], 10);
if (isNaN(year) || isNaN(month) || isNaN(day)) {
return NaN;
}
if (year < 100) {
year += 2000;
}
d = new Date(year, month, day);
var dt = jsToMsDate(d);
return dt;
}
Run Code Online (Sandbox Code Playgroud)
关于该更新的一些其他说明:
parseInt解析最终用户的数字,并始终指定基数(10为十进制).(不,parseInt不是慢于Number或者是一般的+技巧.人们认为它是,但事实并非如此.)new Date()再次提供日期实例.您需要在设置日期之前设置月份(或者在Marc B的评论中指出,使用Date(yearval, monthval, dayval)构造函数).
创建Date对象时,默认为当前日期.在撰写六月的时候,所以当你试图将这一天设置为31时,它就会结束.
...由于闰年中的行为相似,您应该在设置月份或日期之前设置年份.
(你在6月而不是7月开发这个代码是一个很好的工作 - 这个bug会在9月之前潜伏未被发现,并且它可能是你的用户发现它而不是你.:-)
| 归档时间: |
|
| 查看次数: |
4307 次 |
| 最近记录: |