假设我在斯里兰卡(抵消+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;
在转换回当地时间后,上面给出了错误的结果。
答案 0 :(得分: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 -^
parseInt('-10.00')
没有理由;只需使用-10
。
这里你除以1000:
var timestamp = (localTimestamp/1000) + offset;
然后你说
在转换回当地时间后,上面给出了错误的结果。
回去时你需要再次繁殖:
var newDate = new Date(timestamp * 1000);
然后,您需要注意如何使用生成的Date
,因为它仍然适用于它认为的本地时间。但是如果你将它转换为字符串等,你可以使用它。