【问题标题】:Subtract working days from a date using Javascript使用Javascript从日期中减去工作日
【发布时间】:2016-03-02 23:11:04
【问题描述】:

我想在我的 zapier.com-zap 中使用 Javascript。这是我现在连续五天尝试做的事情:

我有一个日期(您需要的任何自定义格式),需要从中减去两个工作日,然后使用 Javascript 将其输出到 DD-MM-YYYY。听起来很简单,但我不明白它的工作原理。

我希望有人可以帮助我解决这个问题!非常感谢。

我忘了提一个重要的事情,抱歉。如果结果是星期天或星期六,我需要最后一个工作日(星期五)的日期。

【问题讨论】:

  • 你愿意使用外部库吗?如果是这样,Moment.js 会让这个过程变得非常简单 (moment(date).subtract(2, 'days').format('DD-MM-YYYY'))。
  • “工作日”是否重要,或者我们可以从任何给定日期返回两天? (示例:是否跳过周末?b/c 会使问题稍微复杂化)
  • 我忘了提一个重要的事情,对不起。如果结果是周日或周六,我需要最后一个工作日(周五)的日期。
  • 非常感谢您对我的帮助!非常感谢!
  • 您至少应该尝试一些代码,这不是免费的代码编写服务。这里有很多类似的问题,网上也有很多关于从日期中加减天数以及确定星期几的信息。

标签: javascript date


【解决方案1】:

如果您愿意使用外部库,MomentJS 是一个非常流行的用于解析和修改 JavaScript 日期的工具,它会让这变得非常简单:

示例 1:减去 2 天和格式

var date = new Date(),
    formatted = moment(date).subtract(2, 'days').format('DD-MM-YYYY');

document.getElementById('date').innerHTML = date;
document.getElementById('example').innerHTML = formatted;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/moment.min.js"></script>
This example takes today's date (<span id="date"></span>), subtracts 2 days from it,
and then displays it below in the desired format (DD-MM-YYYY):

<p id="example"></p>

示例 2:减去 2 个工作天数和格式

如果工作日是指周一到周五,您只需确定date 变量中的日期是周一还是周二,然后调整值相应地传递给 MomentJS 的 subtract 方法。我们可以使用MomentJS's get day of week function

var date = new Date(),
    formatted, daysToSubtract;

switch (moment(date).day()) {
    // Sunday = 3 days
    case 0:
      daysToSubtract = 3;
      break;
    // Monday and Tuesday = 4 days
    case 1:
    case 2:
      daysToSubtract = 4;
      break;
    // Subtract 2 days otherwise.
    default:
      daysToSubtract = 2;
      break;
}


formatted = moment(date).subtract(daysToSubtract, 'days').format('DD-MM-YYYY');

document.getElementById('date').innerHTML = date;
document.getElementById('example').innerHTML = formatted;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/moment.min.js"></script>
This example takes today's date (<span id="date"></span>), subtracts 2 working days (Monday to Friday) from it,
and then displays it below in the desired format (DD-MM-YYYY):

<p id="example"></p>

【讨论】:

    【解决方案2】:

    虽然我同意@James Donnelly 的观点,momentjs 很棒,但这里是您无需使用额外库即可完成任务的方法。我创建了这个辅助函数来完全按照您的要求进行操作。只需传递您的日期以及您想要添加/减去多少天(在您的情况下为-2)。

    function addDaysToDate(date, days)
    {
        var result = new Date(date);
        result.setDate(result.getDate() + days);
        var dd = result.getDate();
        var mm = result.getMonth() + 1; // January starts at 0.
        var yyyy = result.getFullYear();
    
        if (dd < 10)
        {
            dd = '0' + dd
        }
        if (mm < 10)
        {
            mm = '0' + mm
        }
    
        return dd + '/' + mm + '/' + yyyy;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      相关资源
      最近更新 更多