2010-05-18 74 views
1

我有一个毫秒的时间,即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日上午03时三十分00秒”的日期,但这不是正确的输出为“周二, 2010年5月18日3:30:00 AM“(不知道这种情况下的AM或PM)是正确的。但我不知道这里有什么问题。

我的当前localtimezone是GMT + 0530。

回答

3

这里我可以得到所需的输出

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 
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 
+0

好吧,我不知道生根粉UTC所以最终如果我想1274203800000转换成GMT +10那么有没有任何选项在JavaScript可用? – hunt 2010-05-18 14:36:10

+1

你已经有了。 '1274203800000' **是**'2010-05-19 03:30:00 UTC + 10'。如果您使用数字“1274203800000”代表某个其他时间,那么您得到的不是标准的JavaScript时间戳,而必须确定它到底是什么。 – bobince 2010-05-18 14:48:59

+0

你是对的它已经+10现在我怎么会将它转换成12小时格式? – hunt 2010-05-18 15:35:26

0

1274203800000在Epoch是星期二,2010 5月18日17:30:00 GMT

(你可以使用这个时代转换http://www.epochconverter.com/

现在,如果你这样做:

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

你得到正确的GMT时间。

+0

感谢格林威治标准时间,因为它目前给我的星期二,2010年5月18日17:30:00现在我想添加+10,所以有什么选项可用于该 – hunt 2010-05-18 15:16:23

+0

我认为它已经是+10作为bobince说现在我如何将它转换成12小时制? – hunt 2010-05-18 15:34:34

相关问题