【发布时间】:2014-04-04 09:26:42
【问题描述】:
我搜索了这个问题,发现Stackoverflow上没有答案。所以我决定回答它...
如果您需要将下周/上周的开始/结束以星期一作为一周的开始,则此问题会有所帮助。
【问题讨论】:
标签: javascript jquery momentjs daterangepicker
我搜索了这个问题,发现Stackoverflow上没有答案。所以我决定回答它...
如果您需要将下周/上周的开始/结束以星期一作为一周的开始,则此问题会有所帮助。
【问题讨论】:
标签: javascript jquery momentjs daterangepicker
我为此使用了 moment js ...你可以从 here 获得它
/*
all functions return moment() object.. <br>
GetNextWeekStart().format('DD/MM/YYYY') to get 24/02/2014
*/
function GetNextWeekStart() {
var today = moment();
//edited part
var daystoMonday = 0 - (today.isoWeekday() - 1) + 7;
var nextMonday = today.subtract('days', daystoMonday);
return nextMonday;
}
function GetNextWeekEnd() {
var nextMonday = GetNextWeekStart();
var nextSunday = nextMonday.add('days', 6);
return nextSunday;
}
function GetLastWeekStart() {
var today = moment();
var daystoLastMonday = 0 - (1 - today.isoWeekday()) + 7;
var lastMonday = today.subtract('days', daystoLastMonday);
return lastMonday;
}
function GetLastWeekEnd() {
var lastMonday = GetLastWeekStart();
var lastSunday = lastMonday.add('days', 6);
return lastSunday;
}
【讨论】:
GetNextWeekStart 如果today 是星期二,我得到以下信息:> today.format('ddd, D-M-Y'); OUTPUT: 'Tue, 22-11-2016' > daystoMonday = 0 - (today.isoWeekday() - 1) + 7; OUTPUT 6 > nextMonday = today.subtract('days', daystoMonday) > nextMonday.format('ddd, D-M-Y') OUTPUT 'Wed, 16-11-2016' 不应该@987654329 @改为today.add('days', daystoMonday)?
这是在the lang file 中指定的,您可以包含lang/en-au.js 或lang/en-gb.js 文件并设置所需的语言标准。假设您在英国:
moment.lang('en-gb');
如果您不想使用自定义语言,可以将其更改为默认的美国语言环境:
moment.lang('en-custom', {
week: {
dow: 1,
doy: 6 // Adjust the first week of the year, depends on the country. For the US it's 6. For the UK, 4.
}
});
那么你可以这样做:
var date = '2014-03-24';
console.log('next start', moment(date).weekday(7).format('DD/MM/YYYY'));
console.log('next end', moment(date).weekday(13).format('DD/MM/YYYY'));
console.log('prev start', moment(date).weekday(-7).format('DD/MM/YYYY'));
console.log('prev end', moment(date).weekday(-1).format('DD/MM/YYYY'));
console.log('current start', moment(date).weekday(0).format('DD/MM/YYYY'));
console.log('current end', moment(date).weekday(6).format('DD/MM/YYYY'));
/*
next start 31/03/2014
next end 06/04/2014
prev start 17/03/2014
prev end 23/03/2014
current start 24/03/2014
current end 30/03/2014
*/
【讨论】:
聚会有点晚了,但这是我发现表达周开始/结束的最简单方法。 isoWeek 参数根据ISO 8601 从星期一开始几周,而week 开始几周取决于您的语言环境(所以可能是星期日或星期一)。
本周:
moment().startOf('isoWeek')
moment().endOf('isoWeek')
下周:
moment().add(1, 'weeks').startOf('isoWeek')
moment().add(1, 'weeks').endOf('isoWeek')
上周:
moment().subtract(1, 'weeks').startOf('isoWeek')
moment().subtract(1, 'weeks').endOf('isoWeek')
我喜欢这些结构,因为它们具有令人难以置信的可读性。通过在subtract 或add 中指定所需的周数,也可以轻松返回或前进任意周数。
【讨论】:
.startOf("week") 实际上取决于区域设置,因此它可能并不总是星期日。
//Last week (get current week array list from momentjs)
var sd = moment(currentWeekFd[0]).subtract(7, 'days').format();
var ed = moment(currentWeekEd[6]).subtract(7, 'days').format();
var lastWeekStratDay = moment(sd).format('YYYY-MM-DD');
var lastWeekEndDay = moment(ed).format('YYYY-MM-DD');
console.log(lastWeekStratDay +', '+ lastWeekEndDay)
//Next week
var sd = moment(currentWeekFd[0]).add(7, 'days').format();
var ed = moment(currentWeekEd[6]).add(7, 'days').format();
var nextWeekStratDay = moment(sd).format('YYYY-MM-DD');
var nextWeekEndDay = moment(ed).format('YYYY-MM-DD');
console.log(nextWeekStratDay +', '+ nextWeekEndDay)
【讨论】: