tma*_*n16 30 javascript jquery momentjs
我试图在我的JavaScript代码中排除周末.我使用moment.js并且很难为'days'选择正确的变量.
到目前为止,我认为我需要通过将工作日变量更改为仅从第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>
Run Code Online (Sandbox Code Playgroud)
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);
}
});
});
Run Code Online (Sandbox Code Playgroud)
小智 58
干得好!
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;
}
Run Code Online (Sandbox Code Playgroud)
你这样称呼它
var date = addWeekdays(moment(), 5);
Run Code Online (Sandbox Code Playgroud)
我使用.isoWeekday而不是.weekday因为它不依赖于语言环境(.weekday(0)可以是星期一或星期日).
不要减去工作日,addWeekdays(moment(), -3)否则这个简单的功能将永远循环!
更新了JSFiddle http://jsfiddle.net/Xt2e6/39/(使用不同的momentjs cdn)
小智 23
那些迭代循环解决方案不符合我的需求.它们对于大数字来说太慢了.所以我制作了自己的版本:
https://github.com/leonardosantos/momentjs-business
希望你觉得它有用.
小智 10
https://github.com/andruhon/moment-weekday-calc插件for momentJS可能对类似任务有帮助
它不能解决确切的问题,但能够计算范围内的特定工作日.
用法:
moment().isoWeekdayCalc({
rangeStart: '1 Apr 2015',
rangeEnd: '31 Mar 2016',
weekdays: [1,2,3,4,5], //weekdays Mon to Fri
exclusions: ['6 Apr 2015','7 Apr 2015'] //public holidays
}) //returns 260 (260 workdays excluding two public holidays)
Run Code Online (Sandbox Code Playgroud)
如果你想要一个纯 JavaScript 版本(不依赖 Moment.js),试试这个......
function addWeekdays(date, days) {
date.setDate(date.getDate());
var counter = 0;
if(days > 0 ){
while (counter < days) {
date.setDate(date.getDate() + 1 ); // Add a day to get the date tomorrow
var check = date.getDay(); // turns the date into a number (0 to 6)
if (check == 0 || check == 6) {
// Do nothing it's the weekend (0=Sun & 6=Sat)
}
else{
counter++; // It's a weekday so increase the counter
}
}
}
return date;
}
Run Code Online (Sandbox Code Playgroud)
你这样称呼它...
var date = addWeekdays(new Date(), 3);
Run Code Online (Sandbox Code Playgroud)
此函数检查接下来的每一天,看看它是否是星期六(第 6 天)或星期日(第 0 天)。如果为 true,则计数器不会增加,但日期会增加。此脚本适用于较小的日期增量(例如一个月或更短时间)。
我建议在当前原型中添加一个函数。
也许是这样的?(未经测试)
nextWeekday : function () {
var day = this.clone(this);
day = day.add('days', 1);
while(day.weekday() == 0 || day.weekday() == 6){
day = day.add("days", 1);
}
return day;
},
nthWeekday : function (n) {
var day = this.clone(this);
for (var i=0;i<n;i++) {
day = day.nextWeekday();
}
return day;
},
Run Code Online (Sandbox Code Playgroud)
当您完成并编写一些测试后,发送拉取请求以获得奖励积分。
| 归档时间: |
|
| 查看次数: |
47323 次 |
| 最近记录: |