我正在尝试使用javascript确定两个日期之间的时间。一个例子是:“我在2008年1月5日下午3点戒烟,自退出以来已经过了多少年,几个月和几个小时?”。
所以我的想法是:
嗯,这很奇怪,我无法指出原因。有什么见解吗?
//create custom test date
var d1 = new Date(2012, 8, 28, 13, 14, 0, 0);
//create current date
var d2 = new Date();
//get date times (ms)
var d1Time = (d1.getTime());
var d2Time = (d2.getTime());
//calculate the difference in date times
var diff = d2 - d1;
//create a new date using the time differences (starts at Jan 1, 1970)
var dDiff = new Date();
dDiff.setTime(diff);
//chop off 1970 and get year, month, day, and hour
var years = dDiff.getFullYear() - 1970;
var months = dDiff.getMonth();
var days = dDiff.getDate();
var hours = dDiff.getHours();
您可以在this temporary host处看到它。
答案 0 :(得分:0)
为什么不用数学来计算值?当您执行dDiff.setTime(diff);
时,您所投入的日期对您来说毫无意义。这只是给你一个纪元日期diff
ms。
答案 1 :(得分:0)
更改部分代码可能会解决您的问题。 jsfiddle
var start = new Date(0); // pivote point of date.
var years = dDiff.getFullYear() - start.getFullYear();
var months = dDiff.getMonth() - start.getMonth();
var days = dDiff.getDate() - start.getDate();
var hours = dDiff.getHours() - start.getHours();;
console.log(years, months, days, hours);
但是你必须根据那些值来操纵这些值(它们可能会变为负值)。
答案 2 :(得分:0)
Date
表示特定时间点,而不是两个日期之间的时间跨度。
您正在通过设置自unix时代以来已经过去dDiff
毫秒来创建新日期。
一旦你有几毫秒的时间,你应该通过划分它来提取所需的信息。 See this question
我是否可以建议您查看Moment.js?
答案 3 :(得分:0)
这不准确,因为它没有考虑到闰日。除此之外,它工作正常,我没有看到任何问题。时差约为6.5天。考虑到时区以及0是1月1日的事实,我看到的值是预期的。
准确的解决方案是
答案 4 :(得分:0)
各种说明:
new Date(2012, 8, 28, 13, 14, 0, 0);
是2012年9月28日13:14:00(如果你愿意的话,不是八月)new Date(0)
返回的值不是常量。dDiff.getMonth();
1月份返回0,2月份返回1等。1
开头,所以差异你应该减去它。我认为第二点是你的错误。
根据您的算法,试试这个:
// create date in UTC
//create custom test date
var dlocaltime = new Date(2012, 8, 28, 13, 14, 0, 0);
var d1 = new Date(dlocaltime.getUTCFullYear(),dlocaltime.getUTCMonth(), dlocaltime.getUTCDate(), dlocaltime.getUTCHours(),dlocaltime.getUTCMinutes(),dlocaltime.getUTCSeconds());
//create current date
var now = new Date();
var d2 = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());
console.log(d1);
console.log(d2);
//get date times (ms)
var d1Time = (d1.getTime());
var d2Time = (d2.getTime());
//calculate the difference in date times
var diff = d2 - d1;
//create a new date using the time differences (starts at Jan 1, 1970)
var dDiff = new Date();
dDiff.setTime(diff);
//chop off 1970 and get year, month, day, and hour
var years = dDiff.getUTCFullYear() - 1970;
var months = dDiff.getUTCMonth();
var days = dDiff.getUTCDate()-1; // the date of new Date(0) begin with 1
var hours = dDiff.getUTCHours();
var minutes = dDiff.getUTCMinutes();
var seconds = dDiff.getUTCSeconds();
console.log("Years:"+years);
console.log("months:"+months);
console.log("days:"+days);
console.log("hours:"+hours);
console.log("minutes:"+minutes);
console.log("seconds:"+seconds);