gpt4 book ai didi

javascript - 我们是否在十二月获得了一个小时(夏令时)

转载 作者:行者123 更新时间:2023-11-29 19:42:29 26 4
gpt4 key购买 nike

我制作了一个小代码片段。告诉你几岁,精确到秒。

但是我发现了一些奇怪的事情。我知道时间和时区是工作的噩梦,但这是在我自己的国家和时区内,所以我有点困惑。

如果我输入日期。 27-12-2013(dd-MM-yyyy),会显示:

Right time

这是正确的。因为这里的时间是:08:42。 getTimezoneOffset() 为 -60

但如果我回到某一天,它会显示:

Wrong time

它增加了一个小时!?这是它发生的唯一日期,我有点困惑,因为夏令时只适用于 Spring 和秋季。 getTimezoneOffset() 也是 -60

希望您能阐明这一点。

时区:http://www.timezoneconverter.com/cgi-bin/zoneinfo?s=standard&tz=Europe/CopenhagenJavascript:GMT+0100(浪漫标准时间)
国家:丹麦
JSFiddle:http://jsfiddle.net/d6kBJ/4/

var $output = $(".js-ageoutput");
var bd = new Date(2000, 0, 01);
bd.setHours(0);
bd.setMinutes(0);
bd.setSeconds(0);

function showTotalAge() {
var ageDifMs = Date.now() - bd.getTime();
var ageDate = new Date(ageDifMs); // miliseconds from epoch
displayAge(ageDate)
loopAge();
}

function displayAge(age) {
var yearOld = Math.abs(age.getFullYear() - 1970);
var months = age.getMonth();
var days = age.getDate() - 1;
var h = age.getHours() - 1;
var m = age.getMinutes();
var s = age.getSeconds();
$output.html(yearOld + ' years <br/>' + months + ' months <br/>' + days + ' days <br/>' + h + 'hours <br/>' + m + ' minutes <br/>' + s + ' seconds<br/>');
}

function loopAge() {
setTimeout(showTotalAge, 1000);
}
loopAge();

$(".js-birthday").change(function () {
var vArr = $(this).val().split('-');
bd = new Date(vArr[0], parseInt(vArr[1], 10) - 1, vArr[2]);
bd.setHours(0);
bd.setMinutes(0);
bd.setSeconds(0);
console.log(bd);
});

最佳答案

深入检查您的代码后,您的错误如下:

var ageDate = new Date(ageDifMs);

要点是:永远不要根据不同的日期创建Date 对象,因为这没有意义。您得到的是一个 Date 对象,它表示 1970 年 1 月 1 日 UTC 之后的即时 ageDifMs 毫秒,这就是 getMonthgetDategetHours等引用。

所以,你有一个像 1970 年 3 月 28 日这样的日期,那是夏令时发生的时间。

如果你想知道两个日期在月份和日期等方面的差异,你可以计算 getMonth 和其他方法的结果的差异,或者固定长度一年、一个月的时间,并使用模数和除法计算单个值。

此外,对于定时连续任务,您宁愿使用 setInterval 而不是 setTimeout

关于javascript - 我们是否在十二月获得了一个小时(夏令时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22141339/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com