在javascript中将时间戳偏移添加到本地时间戳

时间:2015-03-04 10:48:11

标签: javascript node.js

假设我在斯里兰卡(抵消+5.30)。我想在美国当地时间上午8点安排一次会议(抵消-10.00),而我将留在斯里兰卡。 我想通过将America的偏移量添加到我的本地时间戳来创建我的时间戳。 有没有人知道如何在不使用时刻的情况下在javascript中执行此操作。 我所做的是,

 var localTimestamp = new Date('2015-02-27 14:59').getTime();
 var offset = parseInt('-10.00')*60*60;
 var timestamp = (localTimestamp/1000) + offset;

在转换回当地时间后,上面给出了错误的结果。

1 个答案:

答案 0 :(得分:1)

那里有几个问题。

  1. 您在这里依赖于未记录的行为:

    var localTimestamp = new Date('2015-02-27 14:59').getTime();
    

    规范中未定义该字符串格式。 V8将对其进行解析(截至本文撰写时),但您无法保证它是在本地时间还是UTC或其中解析它,因为(再次)它是未定义的。要以定义的方式创建日期/时间,您可以使用date/time format in the spec,但遗憾的是他们在ES5中得到了错误的格式并且必须在ES6中修复它:在ES5中,“Z”的缺席结尾被定义为UTC,但这与它所基于的ISO-8601标准不一致,并且意味着你无法说出“当地时间”。由于ES6将解决这个问题,一些引擎已经改变了它;您的V8版本是否取决于版本号。所以你最好使用多参数日期构造函数:

    var localTimestamp = new Date(2015, 1, 27, 14, 59).getTime();
    // Remember that months start at 0 -^
    
  2. parseInt('-10.00')没有理由;只需使用-10

  3. 这里你除以1000:

    var timestamp = (localTimestamp/1000) + offset;
    

    然后你说

      

    在转换回当地时间后,上面给出了错误的结果。

    回去时你需要再次繁殖:

    var newDate = new Date(timestamp * 1000);
    
  4. 然后,您需要注意如何使用生成的Date,因为它仍然适用于它认为的本地时间。但是如果你将它转换为字符串等,你可以使用它。