我正在尝试使用 datejs (date ninja 或whathaveyou..),但我得到了奇怪的结果。 这是我输出到控制台进行测试的内容。
var d1 = Date.today();
var d2 = Date.parse(work.tax_credit_start);
var span2 = new TimeSpan(d2 - d1);
console.log('result of timespan test = ' + span2.getDays() + 'days between now and ' + Date.parse(work.tax_credit_start).toString('dd-mm-yyyy') + ' - ' + work.tax_credit_start );
根据 Excel 和其他在线服务中的日期计算,我预计约为 -584 天。 这是我得到的:
result of timespan test = -462days between now and 30-00-2010 - 30-06-2010
我也有新西兰风格日期的 datejs 本地化文件,所以我不认为这是一个问题。尽管这似乎是问题所在。另外,如果我解析一个日期,然后将其呈现为与解析之前格式相同的字符串,它不应该改变是吗?
漫长的一天,也许我只是需要休息一下。 您的想法/帮助互联网?
最佳答案
首先,2010年00月30日将被解析为2009年12月30日星期三00:00:00。这是你真正想要的吗?
其次,2010年00月30日和2010年6月30日之间的天数相差只有几天,比6个月多,你怎么得到-584天?我得到-182。
无论如何,这并不是一个困难的计算。为所需日期创建两个日期对象,将其时间设置为中午(以消除日期之间的夏令时问题),将一个减去另一个,将结果除以一天中的毫秒数 (24 * 60 * 60 * 1000)并四舍五入到最接近的整数。
这里有一些快速的函数来完成这项工作:
// Iput as d/m/y or d-m-y
function dmyToDate(s) {
var bits = s.split(/[-/]/);
return new Date(bits[2], --bits[1], bits[0]);
}
// Difference between dates in days. If only one date supplied,
// today is used for endDate
// Copy startDate so don't mess it up
function daysBetweenDates(startDate, endDate) {
endDate = typeof endDate == 'string'? dmyToDate(endDate) : new Date();
startDate = typeof startDate == 'string'? dmyToDate(startDate) : new Date(startDate);
endDate.setHours(12,0,0);
startDate.setHours(12,0,0);
var diff = startDate - endDate;
var ms = 24 * 60 * 60 * 1000; // or 8.64e7
return Math.round(diff/ms);
}
关于javascript - 我是写错了还是这是 Date.js (date ninja) 上的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7670367/