毫秒到各种GMT时区的转换

时间:2010-05-18 14:09:56

标签: javascript timezone

我有一个毫秒的时间,即1274203800000,现在我想在javascript中将其转换为GMT + 10。

目前我正在使用以下代码来执行此操作

var milliseconds=1274203800000;
var offset='+10';
var d = new Date(milliseconds);
utc = d.getTime() + (d.getTimezoneOffset() * 60000);
nd = new Date(utc + (3600000*offset));
var result=nd.toLocaleString();
alert(result);

以上代码评估为“2010年5月19日星期三上午3:30:00”,但这不是正确的输出“2010年5月18日星期二3:30:00”(不确定AM)或者在这种情况下PM)是正确的。但我不知道这里的问题是什么。

我目前的本地时区是GMT + 0530。

3 个答案:

答案 0 :(得分:4)

在这里,我可以获得所需的输出

var milliseconds=1274203800000;
var offset=10;
var d = new Date(milliseconds+(3600000*offset));
alert(d.toUTCString());

Initial Input:  Tue, 18 May 2010 17:30:00 GMT
Desired Output: Wed, 19 May 2010 03:30:00 GMT

答案 1 :(得分:2)

时间戳以UTC格式保存。 1274203800000对应2010-05-18 17:30:00 UTC,确实是2010-05-19 03:30:00 UTC+10。我不知道你将如何从该时间戳获得2010-05-18 03:30:00 - 它必须是UTC-14,并且没有国家将其作为时区。

(除此之外:在您的代码中,第一次使用new Date().getTime()没有做任何事情,因为它会返回相同的milliseconds。)

ETA:您无法控制toLocaleString()的格式,格式来自用户的操作系统和浏览器设置。在我的机器上,我得到12小时制,并包含时区名称。这很烦人,因为我认为12-hour time is a total disaster that should be wiped from the face of the planet和时区实际上是错误的。

但无论如何,如果你想要一个特定的时间格式,你必须自己创建它,因为JS没有提供格式化选项。这可能非常繁琐:

var daynames= ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var monthnames= ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
function padLeft(s, l, c) { 
    return new Array(l-s.length+1).join(c || ' ')+s;
};

function to12HourTime(x) {
    var dn= daynames[x.getUTCDay()];
    var mn= monthnames[x.getUTCMonth()];
    var d= padLeft(''+x.getUTCDate(), 2, '0');
    var y= padLeft(''+x.getUTCFullYear() ,4, '0');
    var h= x.getUTCHours();
    var m= padLeft(''+x.getUTCMinutes(), 2, '0');
    var s= padLeft(''+x.getUTCSeconds(), 2, '0');
    var p= h>=12? 'PM' : 'AM';
    h= (h+11)%12+1;
    return dn+', '+mn+' '+d+', '+y+' '+h+':'+m+':'+s+' '+p;
}

var t= 1274203800000;
var d= new Date(t+1000*60*60*10);
alert(to12HourTime(d));
// Wednesday, May 19, 2010 3:30:00 AM

答案 2 :(得分:0)

1274203800000 in Epoch is the,2010年5月18日17:30:00 GMT

(您可以使用此Epoch转换器http://www.epochconverter.com/

现在,如果你这样做:

var milliseconds=1274203800000;
var d = new Date(milliseconds);
alert(d.toUTCString());

你得到正确的GMT时间。