如何使用Moment.js排除两个日期之间的周末 [英] How to exclude weekends between two dates using Moment.js

查看:663
本文介绍了如何使用Moment.js排除两个日期之间的周末的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在JavaScript代码中排除周末。我使用moment.js并且难以为'天'选择正确的变量。

I am trying to exclude weekends in my JavaScript code. I use moment.js and having difficulty choosing the right variable for 'days'.

到目前为止,我认为我需要排除第6天(星期六)和第0天(星期日)通过将工作日变量更改为仅从第1天到第5天计数。但不确定它是如何变化的。

So far I have thought that I need to exclude day 6 (saturday) and day 0 (sunday) by changing the weekday variable to count from day 1 to day 5 only. But not sure how it changes.

我的jsfiddle如下所示: FIDDLE

My jsfiddle is shown here: FIDDLE

HTML

<div id="myContent">
<input type="radio" value="types" class="syncTypes" name="syncTypes"> <td><label for="xshipping.xshipping1">Free Shipping: (<span id="fsv1" value="5">5</span> to <span id="fsv2" value="10">10</span> working days)</label> </td><br>
    <div id="contacts" style="display:none;border:1px #666 solid;padding:3px;top:15px;position:relative;margin-bottom:25px;">     
    Contacts
</div>
<input type="radio" value="groups" class="syncTypes" name="syncTypes"> <td><label for="xshipping.xshipping2">Express Shipping: (<span id="esv1" value="3">3</span> to <span id="esv2" value="4">4</span> working days)</label> </td>    
<div id="groups" style="display:none;border:1px #666 solid;padding:3px;top:15px;position:relative">     
    Groups
</div>
</div>

JavaScript

var a = 5; //Free shipping between a
var b = 10;//and b
var c = 3;//Express shipping between c
var d = 4;//and d    
var now = moment();    
var f = "Your item will be delivered between " + now.add("days",a).format("Do MMMM") + " and " + now.add("days",b).format("Do MMMM");
var g = "Your item will be delivered between " + now.add("days".c).format("Do MMMM") + " and " + now.add("days",d).format("Do MMMM");

var h = document.getElementById('contacts');
h.innerHTML = g

var i = document.getElementById('groups');
i.innerHTML = f

$(function() {
    $types = $('.syncTypes');
    $contacts = $('#contacts');
    $groups = $('#groups');
    $types.change(function() {
        $this = $(this).val();
        if ($this == "types") {
            $groups.slideUp(300);
            $contacts.delay(200).slideDown(300);
        }
        else if ($this == "groups") {
            $contacts.slideUp(300);
            $groups.delay(200).slideDown(300);
        }
    });
});


推荐答案

你走了!

function addWeekdays(date, days) {
  date = moment(date); // use a clone
  while (days > 0) {
    date = date.add(1, 'days');
    // decrease "days" only if it's a weekday.
    if (date.isoWeekday() !== 6 && date.isoWeekday() !== 7) {
      days -= 1;
    }
  }
  return date;
}

你这样称呼它

var date = addWeekdays(moment(), 5);

我用 .isoWeekday 代替 .weekday 因为它不依赖于语言环境( .weekday(0)可以是星期一或星期日)。

I used .isoWeekday instead of .weekday because it doesn't depend on the locale (.weekday(0) can be either Monday or Sunday).

不要减去工作日,即 addWeekdays(moment(), - 3)否则这个简单的函数将永远循环!

Don't subtract weekdays, i.e addWeekdays(moment(), -3) otherwise this simple function will loop forever!

更新了JSFiddle http://jsfiddle.net/Xt2e6/39/ (使用不同的momentjs cdn)

Updated JSFiddle http://jsfiddle.net/Xt2e6/39/ (using different momentjs cdn)

这篇关于如何使用Moment.js排除两个日期之间的周末的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆