我制作了一个小代码段。告诉你你多大了,到第二个。
但我发现了一些奇怪的东西。我知道时间和时区是一个噩梦,但这是在我自己的国家和时区内,所以我有点困惑。
如果我输入日期。 2013年12月27日(dd-MM-yyyy),它将显示:
哪个是对的。这时的时间是:08:42。 getTimezoneOffset() is -60
但如果我回去一天会显示出来:
它增加了一个小时!?这是它发生的唯一日期,我有点困惑,因为夏令时只适用于春季和秋季。 getTimezoneOffset() is ALSO -60
希望你能对此有所了解。
时区:http://www.timezoneconverter.com/cgi-bin/zoneinfo?s=standard&tz=Europe/Copenhagen
Javascript :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);
});
答案 0 :(得分:3)
在深入检查您的代码后,这是您的错误:
var ageDate = new Date(ageDifMs);
重点是:永远不会根据日期差异创建一个Date
对象,因为它没有任何意义。你得到的是一个Date
对象,代表1970年1月1日UTC之后的ageDifMs
毫秒,这就是getMonth
,getDate
,getHours
等方法等等。参考。
所以,你有一个像1970年3月28日这样的日期,那就是夏令时发生的时间。
如果您想知道两个日期在月份和日期等方面的差异,您可以计算getMonth
和其他方法的结果差异,或者确定一年的长度,一个月,使用模数和除法计算单个值。
此外,您宁愿使用setInterval
代替setTimeout
进行定时连续任务。