使用绝对时区的Javascript倒计时?

时间:2012-01-10 15:19:46

标签: javascript date

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

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

我知道我可以使用下面的代码来获取用户的时区,但是我对如何使用它感到迷茫。

  

myDateObj.getTimezoneOffset()/ 60

6 个答案:

答案 0 :(得分:7)

快速搜索显示: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/

只需使用您想要的偏移进行更新,您应该全部设置好。

答案 1 :(得分:6)

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

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

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

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

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

答案 2 :(得分:1)

只需创建一个带有RFC 2822-timestamp时区的日期。然后,该时间将转换为用户当前位置(基于OS设置)。即使修改了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)

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

new Date().toString();
  

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

答案 3 :(得分:0)

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

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

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

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

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

答案 4 :(得分:0)

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

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

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

干杯

答案 5 :(得分:0)

为了修改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对象的原生部分。