Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 以isoWeekday()开始本周的星期一_Javascript_Momentjs - Fatal编程技术网

Javascript 以isoWeekday()开始本周的星期一

Javascript 以isoWeekday()开始本周的星期一,javascript,momentjs,Javascript,Momentjs,我正在创建一个日历,以表格格式打印周数。一个要求是,我能够开始星期一或星期天,根据一些用户的选择。我很难用矩量法 //某个日期范围的开始。可以是一周中的任何一天。 var startOfPeriod=时刻(“2013-06-23T00:00:00”), //我们从第一周开始。 //周一周二周三周四周五周六周日 // 20 21 22 23 24 25 26 开始=时刻(开始时间)。等工作日(1);//将从用户设置中提取 console.log(begin.isoWeekday()

我正在创建一个日历,以表格格式打印周数。一个要求是,我能够开始星期一或星期天,根据一些用户的选择。我很难用矩量法

//某个日期范围的开始。可以是一周中的任何一天。
var startOfPeriod=时刻(“2013-06-23T00:00:00”),
//我们从第一周开始。
//周一周二周三周四周五周六周日
// 20  21   22  23   24  25  26
开始=时刻(开始时间)。等工作日(1);//将从用户设置中提取
console.log(begin.isoWeekday());//1-一切都好
//让我们从第一周开始,尊重等工作日
开始。开始时间(“周”);
console.log(begin.isoWeekday());//发生了什么事???
//获取列标题

对于(var i=0;i您只需将
begin.startOf('isoWeek');
替换为
begin.startOf('week');
isoWeekday
之前调用
startOf

var begin = moment(date).startOf('week').isoWeekday(1);

我想我会在将来的任何PEEP中添加此选项。如果需要,它将始终确保它是星期一,也可以用于始终确保星期天。对我来说,我始终需要星期一,但本地取决于所使用的机器,这是一个简单的解决方法:

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');
var begin=moment().isoWeekday(1).startOf('week');
var begin2=moment().startOf('week');
//可以检查是否第1天=星期天,然后添加1天
//我在英国夏令时的mac仍然将第一天视为周日
var firstDay=moment().startOf('week').format('ddddd')==='Sunday'?
矩().startOf('week')。添加('d',1)。格式('dddd-MM-YYYY'):
矩().startOf('week')。格式('dddd-MM-YYYY');
document.body.innerHTML='可以是周一或周日,具体取决于客户端:
'+ begin.format('dddd-MM-YYYY')+ “

应该是星期一:
”+第一天+ “

也可以是周日或周一”
+ begin2.格式('dddd-MM-YYYY');
对于任何给定的工作日,这里都有一个更通用的解决方案


通过这种方式,您可以设置一周的第一天

moment.locale('en', {
    week: {
        dow: 6
    }
});
moment.locale('en');

请确保将其与
moment().weekday(1);
一起使用,而不是与矩一起使用。isoWeekday(1)

对于那些希望将
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()
操作中安全使用,例如
矩().subtract(1,period).startOf(period);
。这在
isoWeek
期间不起作用
取决于当前的区域设置,在您的案例中,星期日明显标志着一周的开始。
startOf('iweek'))
将获得本周的ISO开始日期,也就是周一。但是你说得对,我在官方网站上没有找到任何文档……当前版本的moment.js使用的是
isoweek
。根据@savinger的评论和:)
isoweek
,大写为W,最新版本的文档如下:可能的快捷方式moment().isoWeekday(1).startOf('isoweek').format('dddd-DD-MM-YYYY')这不能正常工作。对于今天的日期2016-09-05,它返回2016-08-29作为一周的开始日期,该日期不正确,因为今天是星期一(iso周)。正确的答案已经被接受。只需更新,新版本也需要doy(每年的第一天)。这对我有用,谢谢。
moment.locale('en', {
    week: {
        dow: 6
    }
});
moment.locale('en');
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);
};