在javascript中将时间添加到日期对象
Posted
技术标签:
【中文标题】在javascript中将时间添加到日期对象【英文标题】:Add time to a Date object in javascript 【发布时间】:2010-04-07 21:38:10 【问题描述】:我正在尝试在 javascript 中为 Date 对象添加时间,但没有得到我期望的结果。我试图从页面中拉出一个计时器并将其添加到当前时间,以获取计时器何时达到零的 unix 时间戳值。页面上的时间显示为“HH:MM:SS”。这就是我所拥有的:
time=getTimerText.split(":");
seconds=(time[0]*3600+time[1]*60+time[2])*1000;
将时间转换为毫秒。
fDate=new Date();
fDate.setTime(fDate.getTime()+seconds);
将毫秒添加到 javascript 时间戳
alert(Math.round(fDate.getTime() / 1000));
将 javascript 时间戳转换为 unix 时间戳
由于计时器正在倒计时,我每次运行脚本时都应该得到相同的结果,但我没有。谁能看到我在这里做错了什么?
【问题讨论】:
你能举一些你得到的例子吗? 我得到的结果不一致。我认为这是因为 time[2] 作为字符串添加到 time[0]*3600+...+ 希望这是唯一的问题。 对于这样的问题,一些示例结果可以帮助我们找出问题所在(尽管 Andy E 的头脑还是想出来了)。 【参考方案1】:我刚刚用我自己的类似方法测试了你的计算,在计算之前拆分了一个字符串。我想我看到了问题——尝试明确地将time[2]
转换为数字:
seconds=(time[0]*3600+time[1]*60+(+time[2]))*1000;
(+time[2])
使用一元 +
运算符将字符串类型转换为数字类型。
【讨论】:
【参考方案2】:您错过了这样一个事实,即如果您在夏令时生效的当天增加 12 小时,您将休息一个小时(如果偏移量有多大,则休息两个小时)。
例子:
-
以此字符串开头:“31/03/2013 12:00:00”
将日期字符串转换为日期对象:fDate = 31/03/2013 00:00:00 GMT+1
将 12 小时 0 分钟添加到 fDate:fDate = 31/03/2013 13:00:00 GMT+2
为什么?因为在 3 月 31 日凌晨 02:00(上午),您会为夏令时添加一个小时(在瑞典),因此 31 日午夜后 12 小时是 13:00(下午 1:00)。
以下代码将补偿您添加时间前后的时区变化:
fDate.setTime(fDate.getTime() - fDate.getTimezoneOffset() * 60000);
fDate.setTime(fDate.getTime() + seconds);
fDate.setTime(fDate.getTime() + fDate.getTimezoneOffset() * 60000);
【讨论】:
以上是关于在javascript中将时间添加到日期对象的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JavaScript 中将 File 对象添加到 FileList 集合中?