【问题标题】:java script how to get a date range in daysjavascript如何以天为单位获取日期范围
【发布时间】:2014-04-21 10:59:41
【问题描述】:

我有这些日期变量

minVal = new Date(parseInt(dateArr[2]), parseInt(dateArr[0]) - 1, parseInt(dateArr[1]), 00, 00, 00);
maxVal = new Date(parseInt(dateArrTo[2]), parseInt(dateArrTo[0]) - 1, parseInt(dateArrTo[1]), 23, 59, 59);

我用它们来绘制图表。

我需要区分两件事:

  1. 30 天图表。
  2. 30 天后图表。

因此,我需要知道这些日期在

中的差异

我尝试过这样做:

if ((maxVal.getMonth() - minVal.getMonth()) == 0)

它适用于某些值,但不适用于某些值。例如,如果最小日期为29 January 2014,最大日期为01 February 2014,则它不起作用。 我知道这一点,因为我正在计算月份。

但我不知道如何计算天数

我知道getDate() 函数会检索天数,但我真的不知道如何使用它。

感谢您的帮助

【问题讨论】:

  • 这样的问题有很多,看其中一个stackoverflow.com/questions/7763327/…
  • @Deele 这些是长函数。我相信有更简单的事情,对吧?
  • @user3432257 试试我提供的解决方案。它同时支持日历和工作日
  • @KailashYadav 我正在尝试阅读它认为它很长

标签: javascript jquery date-range


【解决方案1】:

试试这个

function workingDaysBetweenDates(startDate, endDate, getWorkingDays) {

    startDate = new Date(startDate);
    endDate = new Date(endDate);

    // Validate input
    if (endDate < startDate)
        return 0;

    // Calculate days between dates
    var millisecondsPerDay = 86400 * 1000; // Day in milliseconds
    startDate.setHours(0,0,0,1);  // Start just after midnight
    endDate.setHours(23,59,59,999);  // End just before midnight
    var diff = endDate - startDate;  // Milliseconds between datetime objects
    var days = Math.ceil(diff / millisecondsPerDay);

    if(getWorkingDays){
        // Subtract two weekend days for every week in between
        var weeks = Math.floor(days / 7);
        days = days - (weeks * 2);

        // Handle special cases
        var startDay = startDate.getDay();
        var endDay = endDate.getDay();

        // Remove weekend not previously removed.
        if (startDay - endDay > 1)
            days = days - 2;

        // Remove start day if span starts on Sunday but ends before Saturday
        if (startDay == 0 && endDay != 6)
            days = days - 1;

        // Remove end day if span ends on Saturday but starts after Sunday
        if (endDay == 6 && startDay != 0)
            days = days - 1;
    }
    return days;
}

workingDaysBetweenDates(start_date, end_date, false);

这是正常工作的小提琴:http://jsfiddle.net/kailashyadav/72b27/

日期格式必须是以下之一:04/24/2014 或 2014-04-24

第三个参数是要获取营业日还是日历日

【讨论】:

  • 我不想设置时间。因为在我的业务中,我自己设定时间。
  • 我可以停在这条线上var days = Math.ceil(diff / millisecondsPerDay); 吗?我的意思是在这一行中我会得到天数,对吧?
  • 你可以,var days 会给你number of days。确保选中var days = Math.ceil(diff / millisecondsPerDay);,因为Math.ceil 将四舍五入该值。
猜你喜欢
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多