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>

这是我比较日期的脚本代码,工作正常,但是当我检查 07/04/2013 和 08/04/2013 时,它显示“ DateFrom 不能大于 DateTo ”,只有这些日期显示错误的结果。我的脚本中是否有任何错误或其他错误?

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

4

3 回答 3

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");
  }

看这里

于 2013-03-25T04:08:34.603 回答
1

在解释 parseInt 函数的参数时,当字符串以“0”开头(例如,'07'、'08')时,旧版浏览器将默认使用八进制基数(base-8 编号系统)。从 ECMAScript 5 开始,默认值为十进制基数 (10)(即,这很棘手,但至少现在它已被贬值)。

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

为了安全起见,在处理日期(我知道我这样做)时,始终将第二个参数中的基数设置为 parseInt,例如 parseInt(x, 10) 用于常规基数 10。

顺便说一句,前面带0的数字表示其他语言的八进制基数,所以在将字符串转换为数字时最好去掉它们。

祝你好运!

于 2013-03-25T04:23:29.290 回答
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 对象被强制转换为一个数字,即它们的时间值

于 2013-03-25T04:45:08.763 回答