2015-10-19 34 views
0

我的目标是将表示Unix纪元时间(或自1970年1月1日午夜以来的毫秒数)转换为UTC(本地时间)的本地时间或GMT)时区。尝试将Unix纪元时间转换为UTC本地日期/时间字符串

所以我有这样的方法:

function formatDateTimeFromTicks(nTicks) 
{ 
    //'nTicks' = number of milliseconds since midnight of January 1, 1970 
    //RETURN: 
    //  = Formatted date/time 
    return new Date(nTicks).toLocaleString(); 
} 

由于我使用的1442004135000值作为一个例子,应该给我‎9‎/‎11‎/‎2015‎ 8‎:‎42‎:‎15‎ ‎PM为我的语言环境(here的,你可以检查),但我的方法:

alert(formatDateTimeFromTicks(1442004135000)); 

给我‎‎9‎/‎11‎/‎2015‎ ‎1‎:‎42‎:‎15‎ ‎PM

任何想法为什么以及如何解决它?

+0

什么是你的区域设置?我得到8:42 pm,我的时区设置为CEST。准确地说,我得到“11 septembre 2015 22:42:15 UTC + 2” – Touffy

+0

@Touffy:在这种情况下的时区应该不重要,因为我需要它显示UTC(或格林威治)时区的时间。区域设置应该仅用于格式化日期/时间本身。换句话说,它不应该转换任何东西。 – c00000fd

+0

对不起,你想要UTC。希望我的回答有帮助。 – Touffy

回答

0

本地日期对象将不够用,因为即使在最好的情况下它也不会为您提供UTC 区域设置字符串。我强烈建议你使用优秀的moment库在所有平台上都有可靠的行为。

用法语显示很好的本地化UTC:

moment(1442004135000).utc().locale('fr').format('LLLL') 

=> “vendredi 11 septembre 2015年20:42”

+1

谢谢,但这是一个关于“纯粹”JavaScript的问题。我不想将整个图书馆“拖”到我的页面上以显示一个日期。这正是互联网如此臃肿的原因! – c00000fd

+0

我不习惯于将图书馆拖入我的答案中(特别是我有点讨厌看到jQuery无处不在),但在这种情况下,本地对象只是很糟糕,而且时间非常好。如果您想使用本机日期达到相同的结果,则必须猜测本地化输出的哪一部分是小时,然后更改该部分以更正时区。 – Touffy

相关问题