时间的比较很简单,可以直接使用比较符号,例如时间先后比较:
var a=new Date();
var b=new Date(1900,1,1);
alert(a>b); //结果为true
时间相等比较:
var a=new Date();
var b=new Date();
alert(a==b); //结果为false
虽然可以直接使用大于或小于号对两个时间对象进行比较,但不能使用==号来判断两个时间对象是否相等,因为这个操作会被系统认为是比较a,b两个变量是否引用了同一个对象,所以结果永远都是false。
问题的关键在于,当使用大于或者小于号比较两个时间对象时,系统内部会对两个对象进行转化,转化为一个用毫秒数表示的整数进行比较,这个毫秒数是根据ECMAScript规范中所定的时间基点得出的。
ECMAScript规范中规定UTC时间的1970年1月1日午夜为时间基点,它的毫秒数表示为+0,之后的时间就是以毫秒数累计。每天增加86400000(24*60*60*1000)毫秒。而时间进行比较时的依据就是当前时间距离基点的毫秒数,越多的毫秒数表示日期越大,所以更精确的时间比较,就是先将日期对象转换为毫秒数,然后再进行比较,例如:
var a=new Date();
var b=new Date();
alert(a==b);
//连续获取两个时间快照,在正常情况下不会达到毫秒误差,所以结果是true
alert(a.valueOf()==b.valueOf()); //注意O是大写的字母
alert('当前年份:'+a.getFullYear()+'\n距时间基点相差'+parseInt(a/(24*60*60*1000*365))+'年');
运行结果如下: