Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.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日期()转换为UTC和偏移时间_Javascript_Datetime - Fatal编程技术网

将javascript日期()转换为UTC和偏移时间

将javascript日期()转换为UTC和偏移时间,javascript,datetime,Javascript,Datetime,我在一个网站上有一个倒计时装置(它起到了当天发货倒计时装置的作用,因此访问者知道如果他们下了订单,如果他们在时间窗口内,它将在今天发货。)基本上,计时器只是从周一到周五倒计时到下午5:00,然后在“0”(午夜,24小时)再次开始,这一切都正常工作 然后我意识到,由于时间是客户端(javascript),PST时区上的访问者将看到一个错误的时间,而不是他们应该看到的时间(商店位于东部) 不幸的是,我不能使用php或服务器端的任何东西从服务器获取时间,所以它必须是javascript(转换为UTC和

我在一个网站上有一个倒计时装置(它起到了当天发货倒计时装置的作用,因此访问者知道如果他们下了订单,如果他们在时间窗口内,它将在今天发货。)基本上,计时器只是从周一到周五倒计时到下午5:00,然后在“0”(午夜,24小时)再次开始,这一切都正常工作

然后我意识到,由于时间是客户端(javascript),PST时区上的访问者将看到一个错误的时间,而不是他们应该看到的时间(商店位于东部)

不幸的是,我不能使用php或服务器端的任何东西从服务器获取时间,所以它必须是javascript(转换为UTC和偏移量)

就我所知,我在变量上做错了什么,可能更多,有人能告诉我我到底做错了什么吗?(它不会在我的控制台中显示任何错误)

if(document.getElementById('CountdowntTimer')){
pad=函数(n,len){//前导0
var s=n.toString();
返回(新数组((len-s.length+1)).join('0'))+s;
};
函数计算时间(偏移量){
//为当前位置创建日期对象
var d=新日期();
//换算为毫秒
//添加本地时区偏移
//获取UTC时间(毫秒)
utc=d.getTime()+(d.getTimezoneOffset()*60000);
偏移量=-5.0;
var now=utc+(3600000*偏移量);
函数倒计时(){
//var now=新日期();

如果((now.getDay()>=1)&&(now.getDay()我在这些行中看到:

    // convert to msec
    // add local time zone offset 
    // get UTC time in msec
    utc = d.getTime() + (d.getTimezoneOffset() * 60000);
    offset = -5.0;  
    var now = utc + (3600000*offset);
您现在将
变量创建为一个数字,然后在函数
countDown()
中将其用作日期对象。 您应该立即将
变量创建为如下日期

var now = new Date(utc + (3600000*offset));

我这样做只是为了在node.js中设置一个expires头…我做了如下操作:

res.setHeader("Expires", new Date(Date.now() + 345600000).toUTCString());
对于另一个应用程序,您可以采用不同的方式:

var updated_date = new Date(Date.now() + 345600000, //miliseconds
    utc_date = updated_date.toUTCString()

玩得开心!

大多数服务器都会发出一个日期头,ajax头请求可以获取该日期头。你也可以从5*3600000中减去它们的偏移量,得到它们的时间与E.S.T.的差值。@dandavis这是一个大型商业托管网站,所以我不确定它们是如何配置的。我知道它们的API不会返回stores时区。你可以转到p在chrome上运行javascript的年龄,按F11,然后按F5,单击网络选项卡,单击第一个输入行,然后单击标题以查看日期是否在其中。如果是,则使用google“ajax head headers”。@dandavis yeah在标题中日期列为GMT,因此我想我可以从该日期转换为新日期(ServerTimeString)应该给你的服务器在用户时区内的时间,不需要任何转换…这或多或少是我使用并开始工作的解决方案。我认为
偏移量
可能类似于
-(d.getTimezoneOffset()/60)
而不是定义
-5.0
,因为这没有考虑DST…但请告诉我-我不确定这是否“通用”。
var updated_date = new Date(Date.now() + 345600000, //miliseconds
    utc_date = updated_date.toUTCString()