javascript - 我是写错了还是这是 Date.js (date ninja) 上的错误

标签 javascript timespan datejs

我正在尝试使用 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/

相关文章:

javascript - 当只给出年份时,如何让 Datejs 只返回年份?

javascript - 在 setTimeout 内调用函数

javascript - typescript 中的范围变量

javascript - 在 Angular 中,如何使用 $location.path 作为 $http.post 成功回调进行重定向

php - 使用时间跨度的最佳方式?

.net - 存储值 > 24 :00:00? 的 .Net 时间跨度的正确 SQL 类型是什么

javascript - 如何将filament的daterangepicker与新的jquery一起使用?

php - 直接加载时显示空白页 (PHP)

c# - 将 TimeSpan 格式化为看起来像时区偏移

javascript - 如何使用 datejs parseExact 解析任意日期