片刻 - 获得一个月内的第一周和上周(整周)

时间:2018-03-02 09:28:38

标签: javascript momentjs

我需要编写一个简单的代码,但我的语法有问题。

我需要用moment.js对象填充数组。此数组包含两个日期之间的所有日期。这是我实现这一目标的逻辑。

  • 获取一个月第一周的星期一(在这种情况下是26/02)。
  • 获取一个月最后一周的星期日(在这种情况下是(01/04)。
  • while循环,在我的数组中推送日期。

目前这是我提出的(但它不起作用)。

my_division = fields.Boolean(
    string='My division',
    default=False,
)

@api.model
def create(self, vals)
    opportunity = super(CrmOpportunity, self).create(vals)
    if opportunity.owner_id.business_unit_id.id == self.env.user.partner_id.business_unit_id.id:
        opportunity.write({
            'my_division': True,
        })
    return opportunity

@api.multi
def write(self, vals)
    update = super(CrmOpportunity, self).write(vals)
    for opportunity in self:
        if opportunity.owner_id.business_unit_id.id == self.env.user.partner_id.business_unit_id.id and \
           opportunity.my_division is False:
            opportunity.write({
                'my_division': True,
            })
        elif opportunity.owner_id.business_unit_id.id != self.env.user.partner_id.business_unit_id.id and \
           opportunity.my_division is True:
            opportunity.write({
                'my_division': False,
            })
        else:
            continue
    return update

这会导致我的应用崩溃。当我记录let start = this.currentDate.startOf("month").startOf("isoWeek"); let end = this.currentDate.endOf("month").endOf("isoWeek"); while (start.isSameOrBefore(end)) { this.month.push(start); start.add(1, "days"); } & start我发现两天都是一样的。

end

我认为我的语法错了,但我无法弄清楚是什么。

2 个答案:

答案 0 :(得分:4)

startOf()endOf()都会改变原文:

  

通过将原始时刻设置为单位时间的开始来突变原始时刻。

你必须使用clone()

  

所有时刻都是可变的。如果你想要克隆片刻,你可以隐式或明确地这样做。

     

暂时致电moment()将克隆它。

您的代码可能如下所示:

let start = this.currentDate.clone().startOf("month").startOf("isoWeek");
let end = this.currentDate.clone().endOf("month").endOf("isoWeek");
while (start.isSameOrBefore(end)) {
    this.month.push(start);
    start.add(1, "days");
}

答案 1 :(得分:1)

this.currentDate.startOf(“month”)更改this.currentDate本身, 所以this.currentDate&开始&结束同一时刻的对象。 因为添加1天开始导致结束添加1天,'start.isSameOrBefore(end)'始终为true而while(start.isSameOrBefore(end)){ } 处于无限循环中

    let start = moment(this.currentDate).startOf("month").startOf("isoWeek");
    let end = moment(this.currentDate).endOf("month").endOf("isoWeek");
    while (start.isSameOrBefore(end)) {
         this.month.push(start);
         start.add(1, "days");
    }