2011-11-01 68 views

回答

2

以下功能的工作原理,当你知道了偏移的时间提前:

var MOSCOW_OFF = 4; // hours 
var MONTHS = ["January", "February", "March", "April", "May", "June", "July", 
       "August", "September", "October", "November", "December"]; 

// desired format => November 1, 2011 21:31:00 
function getLocalTime(offset) { 
    var d = new Date(); 
    d.setTime((new Date().getTime()) + 
       (d.getTimezoneOffset() * 60 * 1000) + // local offset 
       (1000 * 60 * 60 * offset)); // target offset 
    return MONTHS[d.getMonth()] + " " + d.getDate() + ", " + 
      d.getFullYear() + " " + d.toTimeString().split(" ")[0]; 
} 

getLocalTime(MOSCOW_OFF); // => "November 2, 2011 01:22:27" 

上面永远是可行的对于莫斯科而言,它不再需要夏令时,但您需要知道为赫尔辛基制定等效的通用解决方案的时间。

+0

您的版本完全符合我的格式。谢谢。你认为如果我只是补充抵消2(这是赫尔辛基),是足够的或需要更多的工作?像var HEL_OFF = 2; .... getLocalTime(HEL_OFF); – devjs11

+0

@Alex - 此时此刻,这将会奏效,因为赫尔辛基目前不在夏令时,但在3月27日到10月30日之间将为+3。 –

+0

您的代码完美无缺,但这是一个无法解决的问题感。我位于欧洲。如果我将莫斯科的偏移量设置为4,将赫尔辛基的偏移量设置为2,我会看到正确的时间,但是一些(并非全部)用户报告时间不正确,并且提前+1。这对你有意义吗?其他则表示感谢您的解决方案! – devjs11

3
// create Date object for current location 
d = new Date(); 
// convert to msec since Jan 1 1970 
localTime = d.getTime(); 
// obtain local UTC offset and convertto msec 
localOffset = d.getTimezoneOffset() * 60000; 
// obtain UTC time in msec 
utc = localTime + localOffset; 
// obtain and add destination's UTC time offset 
// for example, Paris 
// which is UTC + 1.0 hours 
offset = 1.0; 
paris = utc + (3600000*offset); 
// convert msec value to date string 
nd = new Date(paris); 
document.writeln("Paris time is " + nd.toLocaleString() + "<br>"); 

(对不起,不知道赫尔辛基偏移,大概2?)

注意,从使用getTimezoneOffset()返回一个负值表示当前位置是比UTC,而正值表示该位置在UTC后面。

[编辑]
这可以更好地工作:(请注意,你必须自己从recv'd helsinki变量操纵格式

function getTZTime (tzOffset) { 
    local = new Date(); 
    off = (local.getTimezoneOffset()) * 60 * 1000; 
    timeStamp = local.getTime() + off; 
    off += 1000 * 60 * 60 * tzOffset; 
    nd = new Date(); 
    nd.setTime(timeStamp); 
    return (nd); 
} 

helsinki = getTZTime (2); // Helsinki is 2 TZ's from GMT 

[/编辑]

+0

我在控制台收到以下错误“未捕获的ReferenceError:UTC是没有定义” – devjs11

+0

编辑 - 添加更多信息(抱歉) – KevinDTimm

+0

这不是一个正确的答案 –