2013-03-25 101 views
0
<script> 
    dfrom = datefrom.split("/"); 
    dto = dateto.split("/"); 

    //Checking Year Part; 
    if(parseInt(dfrom[2]) > parseInt(dto[2])){ 
     alert("DateFrom Cannot greater than DateTo"); 
     return false; 
    } 
    if((parseInt(dfrom[1]) > parseInt(dto[1])) && parseInt(dfrom[2]) == parseInt(dto[2])){ 
     alert("DateFrom Cannot greater than DateTo"); 
     return false; 
    } 
    if(parseInt(dfrom[0]) > parseInt(dto[0]) && (parseInt(dfrom[1]) == parseInt(dto[1])) && parseInt(dfrom[2]) == parseInt(dto[2])){ 
     alert("DateFrom Cannot greater than DateTo"); 
     return false; 
    } 
</script> 

这是我的脚本代码来比较日期和工作正常,但是当我检查2013年7月4日和2013年8月4日,它显示“DateFrom不会比DateTo更大的”和只有这些日期显示错误的结果。我的脚本或其他东西是否有错误?的Javascript:日期比较

任何帮助将是非常可观的。

+2

使用javascript日期库。这很容易。 – ahren 2013-03-25 04:06:38

+0

使用parseInt(东西,10),或'08'和'09'字符串将是八进制数字。 – kennebec 2013-03-25 04:20:07

+0

写的代码是(半)无稽之谈。你有返回语句,但没有封闭函数。即使添加了正确的管道(并且从不使用parseInt与一个基数),代码似乎可以与提到的日期一起工作,但是谁又知道我是否以一种你没有的方式改变代码...... – jmbucknall 2013-03-25 04:28:18

回答

1

试试这个

dfrom = datefrom.split("/"); 
dto = dateto.split("/"); 


var x=new Date(); 
x.setFullYear(dfrom [2],dfrom [1]-1,dfrom [0]); 

var y=new Date(); 
y.setFullYear(dto [2],dto [1]-1,dto [0]); 


if (x>y) 
    { 
    alert("X is big "); 
    } 
else 
    { 
    alert("Y is big"); 
    } 

see here

+0

+1,但不需要创建日期对象然后修改值,您可以将值传递给构造函数并保存一个步骤和函数调用。 – RobG 2013-03-25 04:50:44

1

在解释parseInt函数函数的参数,旧的浏览器将使用八进制(基数为8的编号系统)作为默认当字符串开头“0”(例如'07','08')。从ECMAScript 5开始,缺省值是小数基数(10)(即,这是棘手的,但至少现在它已经折旧)。

换句话说,如果您将字符串(“01”)或以0开头的数字(01)传递给parseInt而不指定第二个参数(基数,意思是什么编号系统),它们将会被解释为具有基数8.这意味着07 === 7和08可能具有未定义的行为(0,“”,未定义,谁知道?)。

为了安全起见,总是在第二个参数设为您的基数parseInt函数的日期(我知道我这样做)打交道时,例如parseInt函数(X,10)定期基地10

顺便说一句,带0的前导数字表示其他语言的八进制小数,因此在将字符串转换为数字时很好地摆脱它们。

祝你好运!

+0

虽然你对ES5改变前导零的方式是正确的,但并非所有的浏览器都已经实现了它(如果有的话)。八进制处理不被*弃用*,它被删除。 – RobG 2013-03-25 04:48:50

0

比较日期字符串的最简单方法是将它们转换为日期对象并进行比较,因此如果日期字符串的格式为d/m/y。你可以这样做:

// s in format d/m/y 
// e.g. 15/3/2013 or 15/03/2013 
function toDate(s) { 
    var s = s.split('/'); 
    return new Date(s[2], --s[1], s[0]); 
} 

var d0 = '3/3/2013'; 
var d1 = '15/3/2013'; 

// Compare dates 
alert(toDate(d0) < toDate(d1)); // true 

alert(toDate(d1) < toDate(d0)); // false 

当在比较或算术运算中使用,Date对象被强制为一个数字,是他们的time value