【问题标题】:Javascript countdown using absolute timezone?使用绝对时区的Javascript倒计时?
【发布时间】:2012-01-10 15:19:46
【问题描述】:

我有一个 javascript 倒数计时器,它通过获取指定的日期和时间并将其与当前日期和时间进行比较来工作。问题是,当前时间是相对于用户时区的,所以用户之间的剩余时间是不同的。

如何让计时器倒计时到特定时区的某个时间,在我的情况下为 GMT -5 小时?

我知道我可以使用下面的代码来获取用户时区,但我不知道如何使用它。

myDateObj.getTimezoneOffset( ) / 60

【问题讨论】:

标签: javascript date


【解决方案1】:

您可以使用Date.UTC(year,month,day,hours,minutes,seconds,msec)

它的操作方式与 Date 构造函数类似,但返回的是格林威治时间 (offset=0) 而不是本地时间的参数时间戳。

var localtime=new Date(Date.UTC(year,month,day,hours,minutes,seconds,msec)) 

返回指定 UTC 时间的本地时间。

每个人(其时钟设置正确)将一起结束倒计时。

【讨论】:

  • 这是更好的答案
  • 超级简单,完美运行,谢谢!
【解决方案2】:

快速搜索发现:convert-the-local-time-to-another-time-zone-with-this-javascript

逐字逐句地为您提供以下示例:

var d = new Date();

var localTime = d.getTime();

var localOffset = d.getTimezoneOffset() * 60000;

var utc = localTime + localOffset;

// obtain and add destination's UTC time offset
// for example, Bombay 
// which is UTC + 5.5 hours
var offset = 5.5;   
var bombay = utc + (3600000*offset);

var nd = new Date(bombay); 
alert("Bombay time is " + nd.toLocaleString() + "<br>");

jsFiddle:http://jsfiddle.net/GEpaH/

只需更新你想要的偏移量,你就应该准备好了。

【讨论】:

    【解决方案3】:

    只需创建一个带有RFC 2822-timestamp 和时区的日期。然后该时间将转换为用户当前位置(基于操作系统设置)。即使对daylight savings time进行更正!

    我在挪威,目前是夏令时,所以是 GMT+2。以下是我使用 GMT-0500 创建 Date 对象时发生的情况:

    var myDateObj = new Date("Fri Apr 17 2015 12:00:00 GMT-0500 (CDT)");
    myDateObj.toString();
    

    2015 年 4 月 17 日星期五 19:00:00 GMT+0200 (CEST)

    如何获取您所在位置的正确日期字符串?如果是您当前所在的时区;只需在浏览器开发工具控制台中执行 myDateObj.toString() 即可。对于不同的时区;首先更改操作系统中的时区。 (Or read the RFC)

    new Date().toString();
    

    2015 年 4 月 17 日星期五 12:36:57 GMT+0200 (CEST)

    【讨论】:

    【解决方案4】:

    你并没有真正说出你想要完成的事情。 javascript 日期对象检索本地时间和“时区偏移”(相对于 GMT (UTC))。这些当然是由用户“设置”的,因此即使在同一时区,两个用户也不太可能拥有相同的“时间”。

    如果您尝试在不同用户之间计时,则需要引用一些集中的时间权限。

    我会使用 AJAX 类型调用 (XMLHttpRequest) 到拥有我自己的服务器的页面,该服务器返回我的服务器时间。这样每个用户都在引用相同的时间。

    Google XMLHttpRequest 以查找您需要的 JS 代码示例(通常是针对此类简单服务的相应服务器端代码)。

    PS:我还会安装一些简单的客户端软件,通过每 10 分钟与一个原子钟同步来保持服务器上的时间准确。

    【讨论】:

      【解决方案5】:

      您无法使用 JavaScript 获得准确的日期,因为它是客户端的,并且基于用户的操作系统时钟。您可以使用jCounter 显示基于服务器端时区的倒计时。

      但是,嘿,如果你真的想自己做,下载 jCounter,你会找到一个 dateandtime.php 文件,它会在服务器端检索当前日期,作为时间戳(它必须放在服务器上顺便说一句,不在您的桌面上:P)

      检查该脚本如何使用该文件并检索实际的当前日期以对其进行操作并计算准确的倒计时。

      干杯

      【讨论】:

        【解决方案6】:

        要修改 Brandon 用于计算 UTC 偏移时间的方法,我们可以将代码精简为 Date 对象的两行扩展:

        /* getOffsetDate - Returns a Date shifted by a certain offset 
         * @param offset the UTC offset to shift, in hours
         * @return new date object shifted by UTC offset
         */
        Date.prototype.getOffsetDate = function( offset ) {
          utc = this.getTime() + (this.getTimezoneOffset() * 60000);
          return new Date(utc + (3600000*offset));
        }
        

        然后您可以按如下方式计算 UTC-5 偏移日期:

        myDate = new Date().getOffsetDate(-5); 
        

        应该注意,以这种方式扩展原生原型通常被认为是一种不好的做法,因为它混淆了其他库所依赖的核心对象。为了证明这一点,你不得不争辩说这个功能应该是 Date 对象的原生部分。

        【讨论】:

          猜你喜欢
          • 2017-11-05
          • 2013-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多