将动作日期从UTC转换为当地时间,时间为毫秒

问题描述:

这是对我的previous question的后续处理。在我的解决方案来获得当前的时间,我需要加/减偏移:将动作日期从UTC转换为当地时间,时间为毫秒

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 8pm1343282417(我使用UTC_TIMESTAMP()存储日期)创建的条目。当我把它插入Unix时间戳转换器时,我得到了Thu, 26 Jul 2012 06:00:17 GMT。所以我很困惑为什么MySql的UTC_TIMESTAMP(假设返回当前的UTC日期和时间)给了我一个不同的日期。我在本地工作MySQL数据库,PHP和Flash代码都在单机上。

+0

getTimezoneOffset不是正值还是负值,取决于它是早期还是晚期?所以你应该只使用加法,如果getTimezoneOffset返回负数,它将被减去。 if(createDate.getTimezoneOffset() 2012-07-25 17:18:49

+0

我在美国中部时间,所以应该getTimezoneOffset是否定的? – 2012-07-25 20:19:33

+0

它应该是积极的,我在多伦多,以便EST从getTimezoneOffset获得240。 – 2012-07-25 20:21:37

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

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

这意味着你需要随时添加getTimezoneOffset到当地的日期,以获得UTC日期

所以,

var now:Date=new Date(); 

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

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

你现在有utcNow UTC时间。

注意:utcNow是UTC时间(它在用户的时区当前UTC时间只是虚假申述也就是说,toString()将用户原有的时区附加到获得UNIX时间戳,使用utcNow.valueOf()

有内置的API函数getUTCDategetUTCFullYeargetUTCHoursgetUTCMinutesgetUTCMillisecondsgetUTCMonthgetUTCSeconds您可以在原始(now)日期对象调用来获取这些值只。

+0

这就是我的想法,但如果我添加getTimezoneOffset我得到一个错误的时间。我必须减去它才能找到合适的时间。 – 2012-07-25 18:01:13