在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 集合中?

在 JavaScript 中将字符串解析为日期

Oracle ADF在查询组件中将secondaryPattern添加到Date

在 Hive 中将分钟添加到日期时间

在 Python 中将日期添加到日期

在 Fabric.js 中将对象添加到画布时设置对象的位置