将动作日期从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 8pm
为1343282417
(我使用UTC_TIMESTAMP()存储日期)创建的条目。当我把它插入Unix时间戳转换器时,我得到了Thu, 26 Jul 2012 06:00:17 GMT
。所以我很困惑为什么MySql的UTC_TIMESTAMP(假设返回当前的UTC日期和时间)给了我一个不同的日期。我在本地工作MySQL数据库,PHP和Flash代码都在单机上。
你的问题几乎是你的答案,不是吗?
此值是您需要添加到计算机的本地时间到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函数getUTCDate
,getUTCFullYear
,getUTCHours
,getUTCMinutes
,getUTCMilliseconds
,getUTCMonth
和getUTCSeconds
您可以在原始(now
)日期对象调用来获取这些值只。
这就是我的想法,但如果我添加getTimezoneOffset我得到一个错误的时间。我必须减去它才能找到合适的时间。 – 2012-07-25 18:01:13
getTimezoneOffset不是正值还是负值,取决于它是早期还是晚期?所以你应该只使用加法,如果getTimezoneOffset返回负数,它将被减去。 if(createDate.getTimezoneOffset() 2012-07-25 17:18:49
我在美国中部时间,所以应该getTimezoneOffset是否定的? – 2012-07-25 20:19:33
它应该是积极的,我在多伦多,以便EST从getTimezoneOffset获得240。 – 2012-07-25 20:21:37