我发现一旦我将我的 AS3 日期设置为服务器日期时间,它的整个生命周期都将保持不变。
应该是在更新自己,例如
I set:
2012/10/23 5:20
2小时后(继续运行SWF)它应该是
2012/10/23 7:20
但它仍然存在:
2012/10/23 5:20
这违反了我的要求,我正在寻找一个好的解决方案来保持我的服务器时间是最新的,而不会干扰客户端时间戳
我发现一旦我将我的 AS3 日期设置为服务器日期时间,它的整个生命周期都将保持不变。
应该是在更新自己,例如
I set:
2012/10/23 5:20
2小时后(继续运行SWF)它应该是
2012/10/23 7:20
但它仍然存在:
2012/10/23 5:20
这违反了我的要求,我正在寻找一个好的解决方案来保持我的服务器时间是最新的,而不会干扰客户端时间戳
保持日期同步的一个简单方法是依赖两个日期!
public class SyncDate
{
public function SyncDate(serverDate:Date)
{
_localDate = new Date();
_serverDate = serverDate;
}
private var _localDate:Date;
private var _serverDate:Date;
public function get date():Date
{
var timeDiff:Number = (new Date()).time - _localDate.time;
return new Date(_serverDate.time + timeDiff);
}
}
当您致电时SyncDate#date
,您将获得调整后的服务器日期。
您需要了解的一件事Date Class
是它存储了您创建该实例时的时间详细信息。如果您创建一个Date instance
并在 5 分钟后尝试检索数据,您将获得创建该实例时的时间详细信息,而不是您访问该属性的时间。
为了不断更新时间,您将需要使用重复事件,例如ENTER_FRAME
或Timer Class
来让您的日期实例不断更新。
以下示例用途Timer Class
:
var my_date:Date;
var my_timer:Timer=new Timer(1000);
my_timer.addEventListener(TimerEvent.TIMER, onTimer);
my_timer.start();
function onTimer(e:TimerEvent):void {
my_date = new Date();
trace(my_date.hours + ":" + my_date.minutes + ":" + my_date.seconds);
}
谢谢@Florent,@Sohel Khalifa,我终于解决了这个问题。我试过这个:
var clock:Date = new Date('2012/10/23 5:20:00');
var tim:Timer = new Timer(1000);
tim.addEventListener(TimerEvent.TIMER,function(){
clock.time = clock.time + 1000;
trace(clock.getMinutes()+":"+clock.getSeconds());
});