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