Javascript-比较没有时间的日期

Javascript - Comparing dates without time

本文关键字:日期 没有时间 比较 Javascript-      更新时间:2023-09-26

我试图在javascript中比较两个没有时间部分的日期。第一个日期来自jquery日期选择器,第二个日期来自字符串。

虽然我可以发誓我的方法不久前有效,但现在看起来不起作用了。

我的浏览器是Firefox,但我也需要我的代码才能在IE中工作。

function selectedDateRetentionDaysElapsed() {
    var dateSelectedDate = $.datepicker.parseDate('dd/mm/yy', $('#selectedDate').val());
    // dateSelectedDate is equal to date 2015-09-30T14:00:00.000Z
    var parsedRefDate = isoStringToDate('2015-11-10T00:00:00');
    var reportingDate = getPredfinedDateWithoutTime(parsedRefDate);
    // reportingDate is equal to date 2015-11-10T13:00:00.000Z
    var businessDayCountFromCurrentReportingDate = getBusinessDayCount(dateSelectedDate,reportingDate);
    // businessDayCountFromCurrentReportingDate is equal to 39.9583333333336
    if (businessDayCountFromCurrentReportingDate >= 40) {
        return true;
    }       
    return false;
}
function isoStringToDate(dateStr) {
    var str = dateStr.split("T");
    var date = str[0].split("-");
    var time = str[1].split(":");
    //constructor is new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);
    return new Date(date[0], date[1]-1, date[2], time[0], time[1], time[2], 0);
}
function getPredfinedDateWithoutTime(myDate) {
    myDate.setHours(0,0,0,0)
    return myDate;
}

我的问题是。。。

  1. 我的isoStringToDate函数返回一个带时间的日期,即使我没有指定时间
  2. 日期的setHours调用似乎也不起作用

有人能帮我做这个吗。

获取两个日期之间的全天数的最简单方法是为设置为相同时间的主题日期创建两个日期对象。中午很方便,因为如果你碰巧只打印日期部分,这意味着日期部分不受夏令时的影响(有些地方在午夜推出)。

以下内容在主机系统的时区中执行所有计算。UTC是可以使用的(由于夏令时,将小时设置为0根本不是问题),但要键入更多。

例如:

function differenceInDays(d0, d1) {
  // Copy dates so don't affect originals
  d0 = new Date(+d0);
  d1 = new Date(+d1);
  // Set to noon
  d0.setHours(12,0,0,0);
  d1.setHours(12,0,0,0);
  // Get difference in whole days, divide by milliseconds in one day
  // and round to remove any daylight saving boundary effects
  return Math.round((d1-d0) / 8.64e7)
}
// Difference between 2015-11-12T17:35:32.124 and 2015-12-01T07:15:54.999
document.write(differenceInDays(new Date(2015,10,12,17,35,32,124),
                                new Date(2015,11,01,07,15,54,999)));