在javascript中为Date对象添加时间

时间:2010-04-07 21:38:10

标签: javascript date

我正在尝试在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时间戳

由于计时器倒计时我每次运行脚本时都会得到相同的结果,但我没有。谁能看到我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

我刚刚用我自己的类似测试你的计算,在计算前分割一个字符串。我想我看到了问题 - 尝试明确地将time[2]转换为数字:

seconds=(time[0]*3600+time[1]*60+(+time[2]))*1000;

(+time[2])使用一元+运算符将字符串类型转换为数字类型。

答案 1 :(得分:0)

你错过了这样一个事实,即如果你在夏令时生效的那一天增加了12个小时,那么你将减少一个小时(或者如果偏移量有多大则为两个小时)。

示例:

  1. 以此字符串开头:“31/03/2013 12:00:00”
  2. 将日期字符串转换为日期对象:fDate = 31/03/2013 00:00:00 GMT + 1
  3. 添加12小时,0分钟至fDate:fDate = 31/03/2013 13:00:00 GMT + 2
  4. 为什么呢?因为在3月31日凌晨02:00(AM),您在夏令时增加了一小时(在瑞典),因此在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);