从星期一开始一周,使用 isoWeekday()
Starting the week on Monday with isoWeekday()
我正在创建一个日历,以表格格式打印出几周。一个要求是我能够根据某些用户选项在星期一或星期日开始几周。我很难使用瞬间的 isoWeekday 方法。
// Start of some date range. Can be any day of the week.
var startOfPeriod = moment("2013-06-23T00:00:00"),
// We begin on the start of the first week.
// Mon Tues Wed Thur Fri Sat Sun
// 20 21 22 23 24 25 26
begin = moment(startOfPeriod).isoWeekday(1); // will pull from user setting
console.log(begin.isoWeekday()); // 1 - all good
// Let's get the beginning of this first week, respecting the isoWeekday
begin.startOf('week');
console.log(begin.isoWeekday()); // 7 - what happened ???
// Get column headers
for (var i=0; i<7; i++) {
console.log(begin.format('ddd')); // I want Monday first!
begin.add('d', 1);
}
js小提琴
编辑 我误解了isoWeekday
实际上在做什么。我认为它设置了"一周中的哪一天是一周的第一天"变量(不存在)。它实际上所做的只是改变星期几,就像moment.weekday()
一样,但使用 1-7 范围而不是 0-6。
你只需要用begin.startOf('week');
替换begin.startOf('isoWeek');
。
这样,您可以设置一周的第一天。
moment.locale('en', {
week: {
dow: 6
}
});
moment.locale('en');
确保将其与 moment().weekday(1);
一起使用,而不是 moment.isoWeekday(1)
在isoWeekday
之前调用startOf
。
var begin = moment(date).startOf('week').isoWeekday(1);
工作演示
>我想我会为将来的任何窥视添加这个。 如果需要,它将始终确保其星期一,也可用于始终确保星期日。 对我来说,我总是需要星期一,但本地取决于所使用的机器,这是一个简单的解决方法:
var begin = moment().isoWeekday(1).startOf('week');
var begin2 = moment().startOf('week');
// could check to see if day 1 = Sunday then add 1 day
// my mac on bst still treats day 1 as sunday
var firstDay = moment().startOf('week').format('dddd') === 'Sunday' ?
moment().startOf('week').add('d',1).format('dddd DD-MM-YYYY') :
moment().startOf('week').format('dddd DD-MM-YYYY');
document.body.innerHTML = '<b>could be monday or sunday depending on client: </b><br />' +
begin.format('dddd DD-MM-YYYY') +
'<br /><br /> <b>should be monday:</b> <br>' + firstDay +
'<br><br> <b>could also be sunday or monday </b><br> ' +
begin2.format('dddd DD-MM-YYYY');
这是适用于任何给定工作日的更通用的解决方案。在 jsfiddle 上的工作演示
var myIsoWeekDay = 2; // say our weeks start on tuesday, for monday you would type 1, etc.
var startOfPeriod = moment("2013-06-23T00:00:00"),
// how many days do we have to substract?
var daysToSubtract = moment(startOfPeriod).isoWeekday() >= myIsoWeekDay ?
moment(startOfPeriod).isoWeekday() - myIsoWeekDay :
7 + moment(startOfPeriod).isoWeekday() - myIsoWeekDay;
// subtract days from start of period
var begin = moment(startOfPeriod).subtract('d', daysToSubtract);
<!-- Starting Date From Monday -->
var moment= moment.js;
<!-- Javascript Code -->
var begin = moment().startOf('week').add('days', 1)
<!-- React JS Code -->
var begin = moment().startOf('week').add(2, 'days');
我有用
var begin = moment(date).isoWeekday(1).startOf('isoWeek');
对于那些希望isoWeek
成为默认值的人,您可以修改时刻的行为:
const moment = require('moment');
const proto = Object.getPrototypeOf(moment());
const {startOf, endOf} = proto;
proto.startOf = function(period) {
if (period === 'week') {
period = 'isoWeek';
}
return startOf.call(this, period);
};
proto.endOf = function(period) {
if (period === 'week') {
period = 'isoWeek';
}
return endOf.call(this, period);
};
现在,您可以简单地使用someDate.startOf('week')
,而不必担心您会得到星期天或不得不考虑是使用isoweek
还是isoWeek
等。
此外,您可以将其存储在像const period = 'week'
这样的变量中,并在subtract()
或add()
操作中安全地使用它,例如 moment().subtract(1, period).startOf(period);
.这不适用于isoWeek
句点。
- 在指令控制器中使用$attrs时出现问题
- 如何使用jQuery自动打开页面上的所有链接
- 如何使用url加载程序在webpack中导入多个图像
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何使用jquery在填充自动完成的值后使文本框只读
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何使用WCF服务和javascript表单post上传.doc文件
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使用动画实现纸张推车
- 如何在Angular2中使用jQuery插件
- 使用Express捕获参数
- 使用clickToggle并在单击另一个元素时关闭元素
- 如何使用jQuery选择下拉列表的值
- 可以前端maven插件使用节点,npm已经安装
- 使用javascript将动态表从一个html页面打印到另一个html页
- 使用JS将数组转换为json对象
- 从星期一开始一周,使用 isoWeekday()