【问题标题】:get helsinki local time regardless of local time zone获取赫尔辛基当地时间,无论当地时区如何
【发布时间】:2011-12-19 18:50:54
【问题描述】:

我真的需要使用 javascript 获取赫尔辛基和莫斯科的当前时间,但不管当地时区如何。我想知道怎么做?也许有人有一个例子?

格式为:

2011 年 11 月 1 日 21:31:00

谢谢。

【问题讨论】:

    标签: javascript date time timezone


    【解决方案1】:

    当您提前知道偏移量时,以下功能起作用:

    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"
    

    上述方法始终适用于莫斯科,它不再遵守夏令时,但您需要了解为赫尔辛基制定等效通用解决方案的时间。

    【讨论】:

    • 你的版本完全符合我的格式。谢谢你。你认为如果我只添加偏移量 2(即赫尔辛基)就足够了,还是需要更多的工作?类似 var HEL_OFF = 2; ....getLocalTime(HEL_OFF);
    • @Alex - 这个时候可以正常工作,因为赫尔辛基目前不在夏令时,但在 3 月 27 日至 10 月 30 日之间将是 +3。
    • 您的代码运行良好,但这是一个没有意义的问题。我位于欧洲。如果我将莫斯科偏移量设置为 4 并将赫尔辛基设置为 2,我会看到正确的时间,但一些(不是全部)用户报告时间不正确并且提前 +1。这对你有意义吗?除此之外,感谢您的解决方案!
    【解决方案2】:
    // 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
    

    [/编辑]

    【讨论】:

    • 我在控制台中收到以下错误“未捕获的 ReferenceError: utc is not defined”
    • @lwburk - 添加了所需时区的偏移线
    • 您的第一个代码似乎运行良好,但我不明白如何实现第二部分,您说的那个可能会更好?
    猜你喜欢
    • 1970-01-01
    • 2013-03-24
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多