Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用绝对时区的Javascript倒计时?_Javascript_Date - Fatal编程技术网

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

使用绝对时区的Javascript倒计时?,javascript,date,Javascript,Date,我有一个javascript倒数计时器,它通过获取指定的日期和时间,并将其与当前日期和时间进行比较来工作。问题是,当前时间相对于用户时区,因此用户之间的剩余时间不同 我如何让计时器倒计时到特定时区的某个时间,在我的例子中是GMT-5小时 我知道我可以使用下面的代码来获取用户的时区,但我不知道如何使用它 myDateObj.getTimezoneOffset()/60 快速搜索可显示: 下面的文章逐字逐句介绍了这个示例: var d = new Date(); var localTime = d

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

我如何让计时器倒计时到特定时区的某个时间,在我的例子中是GMT-5小时

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

myDateObj.getTimezoneOffset()/60

快速搜索可显示:

下面的文章逐字逐句介绍了这个示例:

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>");
var d=新日期();
var localTime=d.getTime();
var localOffset=d.getTimezoneOffset()*60000;
var utc=本地时间+本地偏移量;
//获取并添加目的地的UTC时间偏移
//比如孟买
//即UTC+5.5小时
var偏移=5.5;
var bombay=utc+(3600000*偏移量);
var nd=新日期(孟买);
警报(“孟买时间为“+nd.TOLOCALSTRING()+”
”;
jsFiddle:


只需使用所需的偏移量进行更新,您就可以完成所有设置。

您并没有确切说明您的目标是什么。javascript日期对象检索本地时间和“时区偏移”(相对于GMT(UTC))。这些当然是由用户“设置”的,因此即使在同一时区,两个用户也不太可能拥有相同的“时间”

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

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

GoogleXMLHttpRequest可以找到所需JS代码的示例(通常还可以找到类似这样的简单服务的相应服务器端代码)

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

您可以使用
Date.UTC(年、月、日、时、分、秒、毫秒)

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

var localtime=new Date(Date.UTC(year,month,day,hours,minutes,seconds,msec)) 
返回指定UTC时间的本地时间


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

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

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

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


干杯

只需创建一个带有时区的日期。然后,该时间将转换为用户当前位置(基于操作系统设置)。即使更正了

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

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()
。对于不同的时区;首先更改操作系统中的时区。()

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


为了修改Brandon计算UTC转换时间的方法,我们可以将代码精简为日期对象的两行扩展:

/* 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对象的本机部分。

“注意:由于浏览器的差异和不一致性,强烈反对使用Date构造函数(和Date.parse,它们是等效的)解析日期字符串。”-这是解决我的难题的正确方法,我喜欢它,谢谢!这是更好的答案超级简单,工作完美,谢谢!
myDate = new Date().getOffsetDate(-5);