在javascript中向本地时间戳添加时间戳偏移量

Add timestamp offset to local timestamp in javascript

本文关键字:时间戳 添加 偏移量 javascript      更新时间:2023-09-26

假设我在斯里兰卡(偏移量+5.30)。我想在美国当地时间上午8点(偏移量-10.00)安排一次会议,而我住在斯里兰卡。我想通过将美国的偏移量添加到我的本地时间戳来创建我的时间戳。有没有人知道如何在不使用即时时区的情况下用javascript实现这一点。我所做的是,

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

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

这里有几个问题。

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

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

    规范中未定义该字符串格式。V8将解析它(截至本文撰写之时),但您不能保证它是在本地时间还是UTC解析它,因为(再次)它是未定义的。要以定义的方式创建日期/时间,您可以在规范中使用日期/时间格式,但遗憾的是,他们在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')没有任何原因;只需使用CCD_ 2。

  3. 这里你除以1000:

    var timestamp = (localTimestamp/1000) + offset;
    

    但你说

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

    返回时需要再次相乘:

    var newDate = new Date(timestamp * 1000);
    
  4. 然后,您需要小心如何使用生成的Date,因为它仍然在它认为的本地时间内工作。但如果你把它转换成字符串等,你可以使用它。