Flash Date.getTime错误?

时间:2011-09-01 00:30:27

标签: flash actionscript-3 date

我正在撞墙。我的脚本找到了两个日期之间的小时差异,但是..

var data:Array = ["2011-08-30 11:19:19", "01-09-2011 02"];

var aDate:String = data[0].split(" ")[0];

var dateElements:Array = aDate.split("-");
var date1:Date = new Date();
date1.setDate(int(dateElements[2]));
date1.setMonth(int(dateElements[1])-1);
date1.setFullYear(int(dateElements[0]));
date1.setHours(int(data[0].split(" ")[1].split(":")[0]));

trace("date: " + date1.getDate());
trace("month: " + date1.getMonth());
trace("year: " + date1.getFullYear());
trace("hours: " + date1.getHours());

dateElements = data[1].split(" ")[0].split("-");
var date2:Date = new Date();
date2.setDate(int(dateElements[0]));
date2.setMonth(int(dateElements[1])-1);
date2.setFullYear(int(dateElements[2]));
date2.setHours(int(data[1].split(" ")[1]));

trace("__");
trace("date: " + date2.getDate());
trace("month: " + date2.getMonth());
trace("year: " + date2.getFullYear());
trace("hours: " + date2.getHours());
trace("__");
var elapse:Number = date2.getTime() - date1.getTime();

trace(Math.floor(elapse / 3600000));

如您所见,日期元素可以追溯它们应该的方式。现在尝试将数据数组的第一个元素更改为“2011-08-31 11:19:19”。虽然日期元素很好,但最后一条曲线给出了一个非常奇怪的值。甚至更奇怪的是,在Flash IDE中第二次编译此脚本时,编译需要很长时间,然后根本不跟踪任何内容,就像脚本超时一样。

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

如果您在设置日期(日期)之前设置月份,则应该给出正确的结果。默认情况下,创建Date对象时,时间设置为本地(操作系统)日期。现在,它是9月,它只包含30天,所以当你将日期设置为31时,它会自动转换为1.如果你将月份定义为8月,它应该接受31值。为避免二月问题,将年份放在第一位可能是一个好主意。