将ActionScript日期从UTC转换为本地时间,从epoch开始,以毫秒为单位

时间:2012-07-25 17:04:06

标签: actionscript-3

这是对previous question的跟进。在我获得当前时间的解决方案中,我需要添加/减去偏移量:

var createDate:Date = new Date();
var offset:Number = createDate.getTimezoneOffset() * 60 * 1000; 
createDate.time = parseInt("1343174921") * 1000 - offset; // subtracting offset

为了获得正确的时间,我不得不减去偏移(纯猜测)。我如何知道减去或添加偏移量? getTimezoneOffset的文档说:

  

此值是您需要添加的分钟数   计算机的本地时间等于UTC。如果您的计算机设置了时间   晚于UTC,该值将为负值。

是否有一种简单的方法可以确定计算机的时间是否设置为晚于/早于UTC,以便我知道是否需要添加或减去偏移?

更新我已检查过数据库,并且我将7/25/2012 at 8pm上创建的条目存储为1343282417(我正在使用UTC_TIMESTAMP()商店日期)。当我将其插入Unix时间戳转换器时,我得到Thu, 26 Jul 2012 06:00:17 GMT。所以我很困惑,为什么MySql的UTC_TIMESTAMP(假设返回当前的UTC日期和时间)给我一个不同的日期。我在本地工作,MySQL db,php和Flash代码都在单机上。

1 个答案:

答案 0 :(得分:0)

你的问题几乎是你的答案,不是吗?

  

此值是您需要添加到计算机的分钟数   本地时间等于UTC。如果您的计算机的时间设置晚于   UTC,该值将为负数。

意味着您需要始终将getTimezoneOffset添加到本地日期以获取UTC日期

所以,

var now:Date=new Date();

var utcOffset=now.getTimezoneOffset() * 60 * 1000;

var utcNow:Date=new Date(now.valueOf() + utcOffset);

现在你有utcNow的时间。

注意: utcNow只是utc时间的错误表示(它是用户时区的当前UTC时间。即{{1}将附加用户的原始时区。要获取UNIX时间戳,请使用toString()

内置API函数utcNow.valueOf()getUTCDategetUTCFullYeargetUTCHoursgetUTCMinutesgetUTCMillisecondsgetUTCMonth您可以在原始(getUTCSeconds)Date对象上调用它来获取这些值。