ActionScript 3.0+;计算两个日期之间的时间跨度?

ActionScript 3.0+;计算两个日期之间的时间跨度?,actionscript,timespan,Actionscript,Timespan,在ActionScript 3.0中,是否有一种自动方法来计算两个指定日期之间的天数、小时数、分钟数和秒数 基本上,我需要的是相当于.NET Timespan类的ActionScript 有什么想法吗?您可以将两个日期时间转换为自纪元以来的毫秒,执行您的数学运算,然后使用生成的毫秒来计算这些更高的时间跨度数 var someDate:Date = new Date(...); var anotherDate:Date = new Date(...); var millisecondDiffere

在ActionScript 3.0中,是否有一种自动方法来计算两个指定日期之间的天数、小时数、分钟数和秒数

基本上,我需要的是相当于.NET Timespan类的ActionScript


有什么想法吗?

您可以将两个日期时间转换为自纪元以来的毫秒,执行您的数学运算,然后使用生成的毫秒来计算这些更高的时间跨度数

var someDate:Date = new Date(...);
var anotherDate:Date = new Date(...);
var millisecondDifference:int = anotherDate.valueOf() - someDate.valueOf();
var seconds:int = millisecondDifference / 1000;
....
对于这种类型的事情,这些方法也很有用。抱歉,如果动作脚本有点不对劲,但是已经有一段时间了


我还建议您创建一组静态类方法,如果您正在进行大量此类数学运算,则可以执行这些操作。遗憾的是,这一基本功能在标准API中并不存在。

没有自动实现的方法。使用提供的类所能达到的最佳效果是获取date1.time和date2.time,为两个数字提供自1970年1月1日以来的毫秒数。然后可以计算出它们之间的毫秒数。有了一些基本的数学知识,你就可以推导出秒、小时、天等等。

为了准确起见,上面罗素的文章是正确的,直到你得到25天的差值,那么这个数字对于int变量来说就太大了。 因此声明毫秒差:数字


记录在案的getTime()和valueOf()之间可能存在一些差异,但实际上我看不到它

我创建了一个ActionScript TimeSpan类,该类使用与System.TimeSpan类似的API来填补该空白,但由于缺少运算符重载而存在差异。您可以这样使用它:

TimeSpan.fromDates(later, earlier).totalDays;
下面是该类的代码(很抱歉发布了这么大的帖子-我不包括单元测试;)


ArgumentValidation是Mr Szalays的另一类,它进行一些检查,以确保每个方法都有正确的值来执行其任务,而不会抛出无法识别的错误。它们对于使TimeSpan类正常工作不是必需的,因此您可以将它们注释掉,这样类就可以正常工作


Rich可能会在这里发布论证验证类,而且它非常方便,但我将把它留给他;P

对于一些像这样的单一功能,我更愿意。。。 [浓缩自Richard Szalay的代码]

public function timeDifference(startTime:Date, endTime:Date) : String
{
if (startTime == null) { return "startTime empty."; }
if (endTime   == null) { return "endTime empty."; }
var aTms = Math.floor(endTime.valueOf() - startTime.valueOf());
return "Time taken:  "  
    + String( int(aTms/(24*60*+60*1000))     ) + " days, "
    + String( int(aTms/(    60*60*1000)) %24 ) + " hours, "
    + String( int(aTms/(       60*1000)) %60 ) + " minutes, "
    + String( int(aTms/(        1*1000)) %60 ) + " seconds.";
}
var-timeDiff:Number=endDate-startDate;
可变天数:数字=时间差/(24*60*60*1000);
var-rem:Number=int(timeDiff%(24*60*60*1000));
变化小时数:数值=整数(雷姆/(60*60*1000));
rem=int(rem%(60*60*1000));
var分钟数:数字=整数(雷姆/(60*1000));
雷姆=整数(雷姆%(60*1000));
var秒数:数值=整数(rem/1000);
跟踪(天+“>”+小时+“>”+分钟+“>”+秒);

var-time:Number=targetDate-currentDate;
var秒:数字=时间/1000;
var分钟:数字=秒/60;
变量小时:数量=分钟/60;
变量天数:数字=整数(小时/24);
secs=int(secs%60);
分钟=整数(分钟%60);
小时数=整数(小时数%24);
跟踪(秒+“>”+分钟+“>”+小时+“>”+天);

James是对的,它只是一个实用程序类,用于保持消费代码干净。。。虽然这两个答案和侧门答案都应该是注释;)@nchrysler-我不建议在其他人的示例代码中添加特性。尽管如此,请随意添加带有新功能的您自己的答案。@Erwinus-有趣的是,您能给我一个复制声明吗?您能给它添加一个许可证吗?最好是Apache或BSD?不幸的是,有些人在没有许可证的情况下不能使用它。本文是上述代码的副本,附带了Apache许可证:太好了!谢谢RichardInaccurate。不考虑闰年或有29天的二月。
public function timeDifference(startTime:Date, endTime:Date) : String
{
if (startTime == null) { return "startTime empty."; }
if (endTime   == null) { return "endTime empty."; }
var aTms = Math.floor(endTime.valueOf() - startTime.valueOf());
return "Time taken:  "  
    + String( int(aTms/(24*60*+60*1000))     ) + " days, "
    + String( int(aTms/(    60*60*1000)) %24 ) + " hours, "
    + String( int(aTms/(       60*1000)) %60 ) + " minutes, "
    + String( int(aTms/(        1*1000)) %60 ) + " seconds.";
}
var timeDiff:Number = endDate - startDate;
var days:Number     = timeDiff / (24*60*60*1000);
var rem:Number      = int(timeDiff % (24*60*60*1000));
var hours:Number    = int(rem / (60*60*1000));
rem                 = int(rem % (60*60*1000));
var minutes:Number  = int(rem / (60*1000));
rem                 = int(rem % (60*1000));
var seconds:Number  = int(rem / 1000);

trace(days + " << >> " +hours+ " << >> " +minutes+ " << >> " +seconds);
var time:Number = targetDate - currentDate;
var secs:Number = time/1000;
var mins:Number = secs/60;  
var hrs:Number  = mins/60;
var days:Number = int(hrs/24);

secs = int(secs % 60);
mins = int(mins % 60);
hrs  = int(hrs % 24);

trace(secs + "  << >> " + mins + " << >> " + hrs + " << >> " + days);