从数组 Momentjs 添加阻塞星期几的天数
add days blocking days of week from array Momentjs
我有麻烦了。我想知道使用 momentjs 增加特定天数并从数组中排除星期几的特定日期的最终日期。
示例:
我有日期“2015-07-05”。我想为该日期添加 8 天。所以我的最终日期是“2015-07-09”。
但我想排除我在这个数组中的一周中的某些日子:[1,5,6,7](对应于 "monday"、"friday"、"saturday"和 "sunday" ISO 格式)。
排除那些工作日后,我的最终日期必须是“2015-07-21”。但是我不知道怎么解决。
这是一个排除周六周日的功能。但是我不能适应我的场景。
getFinalDate: function( date, days, excluded ){
var increment = days / Math.abs( days );
var addition = Math.ceil( Math.abs(days) / 5 ) * 7 * increment;
var date = moment( date ).add( addition, 'days' );
var remaining = days % 5;
var date = moment( date ).add( addition, 'days' );
while(remaining != 0) {
date.add(increment, 'days');
if( $.inArray( date.isoWeekday(), excluded ) == -1 )
remaining -= increment;
}
return date.format( 'YYYY-MM-DD' );
}
以上函数摘自另一篇文章。它工作完美,但我需要排除工作日数组。
我给你重做了函数,逻辑稍微简单了点。
代码如下:
function getFinalDate(date, days, excluded) {
var increment = days / Math.abs(days),
i = 1,
date = moment(date);
excluded = excluded || [];
do {
date.add(increment, 'days');
if (excluded.indexOf(date.isoWeekday()) === -1) {
i++;
}
} while (i < Math.abs(days));
return date.format('YYYY-MM-DD');
}
我们的想法是,您不断增加或减少 1 天,直到完成超过指定数量的 days
。但是,如果在您添加或减去天数后,isoWeekday()
值在您的排除天数列表中,请不要将其算作 n 天之一。
这里可能存在一个差一错误,您需要对其进行彻底的单元测试,但这应该会让您走上正轨。
我有麻烦了。我想知道使用 momentjs 增加特定天数并从数组中排除星期几的特定日期的最终日期。
示例:
我有日期“2015-07-05”。我想为该日期添加 8 天。所以我的最终日期是“2015-07-09”。
但我想排除我在这个数组中的一周中的某些日子:[1,5,6,7](对应于 "monday"、"friday"、"saturday"和 "sunday" ISO 格式)。
排除那些工作日后,我的最终日期必须是“2015-07-21”。但是我不知道怎么解决。
这是一个排除周六周日的功能。但是我不能适应我的场景。
getFinalDate: function( date, days, excluded ){
var increment = days / Math.abs( days );
var addition = Math.ceil( Math.abs(days) / 5 ) * 7 * increment;
var date = moment( date ).add( addition, 'days' );
var remaining = days % 5;
var date = moment( date ).add( addition, 'days' );
while(remaining != 0) {
date.add(increment, 'days');
if( $.inArray( date.isoWeekday(), excluded ) == -1 )
remaining -= increment;
}
return date.format( 'YYYY-MM-DD' );
}
以上函数摘自另一篇文章。它工作完美,但我需要排除工作日数组。
我给你重做了函数,逻辑稍微简单了点。
代码如下:
function getFinalDate(date, days, excluded) {
var increment = days / Math.abs(days),
i = 1,
date = moment(date);
excluded = excluded || [];
do {
date.add(increment, 'days');
if (excluded.indexOf(date.isoWeekday()) === -1) {
i++;
}
} while (i < Math.abs(days));
return date.format('YYYY-MM-DD');
}
我们的想法是,您不断增加或减少 1 天,直到完成超过指定数量的 days
。但是,如果在您添加或减去天数后,isoWeekday()
值在您的排除天数列表中,请不要将其算作 n 天之一。
这里可能存在一个差一错误,您需要对其进行彻底的单元测试,但这应该会让您走上正轨。