javascript - 如何使用 Moment.js 排除两个日期之间的周末

标签 javascript jquery momentjs

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

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

我的 jsfiddle 显示在这里: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) 可以是周一或周日)。

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

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

关于javascript - 如何使用 Moment.js 排除两个日期之间的周末,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20788411/

相关文章:

javascript - 两个视觉上相同的文本与剪贴板中的文本有何不同?

javascript - MooTools 垂直对齐插件功能

javascript - 如何在当前日期中添加天数?使用脚本和 django

javascript - momentJS 将可能的日期转换为 Date() js 格式

javascript - 如何使用 JS 每小时运行一次代码?

javascript - 时刻 javascript 库和 javascript 日期在有效时间的使用情况

javascript - 如何迭代这个例子

java - 使用 dojo ajax 填充下拉列表

javascript - 如何使用 Meteor 上传文件到 Amazon S3?

javascript - 为什么我的 &lt;script&gt; 没有启用/禁用特定的提交按钮?