比较两个日期

时间:2010-06-22 08:36:05

标签: flex actionscript-3

如何使用actionscript比较2个日期的值 我在我的程序中执行了这段代码..

var time1:Date = new Date(Number(fromDate.substr(0,4)),Number(fromDate.substring(5,7))-1,    Number(fromDate.substring(8,10)));
var time2:Date = new Date(Number(toDate.substr(0,4)),Number(toDate.substring(5,7))-1, Number(toDate.substring(8,10)));

if(time1.getTime() > time2.getTime())
{ 
    Alert.show(time1 + ” is after ” + time2); 
}

我得到错误:错误:令牌流的意外结束

5 个答案:

答案 0 :(得分:5)

AS3不支持Python之类的时间delta类,所以这实际上有点棘手。比较日期时有很多事情需要担心:

  • 夏令时(当时某些国家的时钟在春季和秋季变化一小时)
  • 时区
  • 跨越式年

最简单的方法就是使用日期对象的time属性。这样,您就可以获得以毫秒表示的两个日期之间的准确差异:

var date1:Date = new Date(2001, 9, 12); // Oct. 12, 2001
var date2:Date = new Date(2010, 5, 22); // Jun. 22, 2010
var differenceInMilliseconds:Number = date2.time - date1.time;

使用此time属性可以检查一个日期是在另一个日期之前还是之后。您还可以通过定义一些常量来对两个日期之间的距离进行粗略计算:

const MILLISECOND_PER_SECOND:int = 1000;
const SECOND_PER_MINUTES:int = 60;
const MINUTES_PER_HOUR:int = 60;
const HOURS_PER_DAY:int = 24;
// ... etc ...

var differenceInSeconds:Number = differenceInMilliseconds / MILLISECOND_PER_SECOND;
var differenceInMinutes:Number = differenceInSeconds / SECOND_PER_MINUTES;
var differenceInHouse:Number = differenceInMinutes / MINUTES_PER_HOUR;
var differenceInDays:Number = differenceInHouse / HOURS_PER_DAY;

一旦你达到了几天的时间,就可以解决夏令时问题,因为1小时的变化可能会让它看起来好像已经过了一整天了。经过几天,几周或几个月,你会遇到闰年问题。

答案 1 :(得分:4)

假设您的字符串处理代码正确地为您提供了有效的日期对象,只需使用ObjectUtil.dateCompare函数来比较2个日期:

http://livedocs.adobe.com/flex/3/langref/mx/utils/ObjectUtil.html#dateCompare%28%29

if( ObjectUtil.dateCompare(date1, date2) == 1 ){}

我很确定ASDocs中定义的返回类型是错误的。

如果a为null或b之前,它实际上会返回-1;如果b为空或之前,则为1。

答案 2 :(得分:0)

如果您有两个日期作为Date个对象,请进行比较。例如a.getTime() > b.getTime()

如果它们是字符串,请参阅默认Date.parse()函数可接受的格式。如果没有,您可能还有其他工作要做。

让我们先看看你的价值观,不是吗?

答案 3 :(得分:0)

private function differenceBetweenDates(date1:Date, date2:Date):Number{
    var MS_PER_DAY:uint = 1000 * 60 * 60 * 24;
    var tempDate:Date = new Date(date2.time - date1.time);
        var difference:Number = 
        Math.abs(Math.round((tempDate.time / MS_PER_DAY)));
    return difference;
}

答案 4 :(得分:0)

我已使用以下代码成功比较日期:

//here i have to compare two dates ,these are startdate and enddate.

// gets millisecs counts from 1970 midnight till sellected start date
var Starttimecounts : Number = popJobWin.DFStartDate.selectedDate.time; 

// gets millisecs counts from 1970 midnight till sellected end date
var Endtimecounts : Number = popJobWin.DFEndDate.selectedDate.time ;


if (Starttimecounts > Endtimecounts)
{
    Alert.show('end date should not lesser than start date..wrong!');   
    //replace your logic here                       
}
else
{
    Alert.show('correct!');
    //replace your logic here                       
}