我有一个旧的Web应用程序,其中Javascript用于验证某些日期.用户通常使用2位数年份,我最近发现它将00评为1900而不是2000
if (new Date(tb[0].value) > new Date(tb[1].value)){
alert('Starting date must come before the ending date');
tb[0].focus();
return false;
}
Run Code Online (Sandbox Code Playgroud)
在第一个框中输入1/1/99,在第二个框中输入1/1/00将导致错误消息,指出开始日期必须在结束日期之前,因为99在1999年评估,而00在1900评估.
当然,用户可以使用4位数年来解决这个问题,但我仍然想知道如何让Javascript正确评估2位数年份.
所以我的问题是,如何让Javascript将00评估为2000而不是1900?
Poi*_*nty 21
之所以这样做是因为这种语言是在1990年代(并且匆忙)创建的.您可以以非愚蠢的方式使用getFullYear()和setFullYear()处理年份.
我所做的是写一些代码来检查年份值小于100,如果它大于90(或类似的适当的东西,取决于具体情况)假设它是在20世纪,否则假设21日.
而@Rachel没有办法告诉运行时库的行为不同,至少没有任何标准化的方式.这就是日期代码的工作原理.
Tho*_*4no 21
最简单的方法就是接受它这样做并检查它.
if (date.getFullYear() < 1970) {
date.setFullYear(date.getFullYear() + 100);
}
Run Code Online (Sandbox Code Playgroud)
1970当然只是一个示例值,因为你必须有一个合理的断点.您可能希望将此作为当前年份 - x而不是当然的常量.
小智 5
Chrome实际上正确地处理了这个,但IE和Firefox(至少)没有.这是我的解决方案:
var x = new Date(input); //parse the date initially
if (x!="Invalid Date") {
var n = input.split(/[/-]/); //regex to look for / or - delimited dates
if (n[2].length == 2) //if the input has a 2 digit year
{
var y = x.getFullYear();
if (y < 1950) //and the parser decided it's before 1950
x.setFullYear(y + 100); //add a century
}
}
output = dateToShortString(x); //custom function to standardize formatting
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14909 次 |
| 最近记录: |