【问题标题】:Set end date to a max of 31 days将结束日期设置为最多 31 天
【发布时间】:2018-04-18 08:15:50
【问题描述】:

我正在尝试从给定的 Start DateEnd Date 中提取周数。

如果日期范围超过 31 天,我需要将 endDate 限制为最多 31 天。

示例:

Start date : 1st May 2018
default end date: 30th June 2018
New endDate should be: 31st May 2018

下面是我提取周数的代码

weekByDates() {
  let dates = JSON.parse(localStorage.getItem('pfsessionFilter'));
let stDate = moment((dates[0].value)).format('YYYY-MM-DD');
let eDate = moment((dates[1].value)).format('YYYY-MM-DD');

let startDate = moment(stDate);
let endDate = moment(eDate);
let weekData = [];
if(endDate.diff(startDate, 'days')>31)
endDate = moment(startDate.add(31, 'days')); 
while(startDate.isSameOrBefore(endDate)) {
    if(weekData.length > 0) {
        // Update end date
        let lastObj = weekData[weekData.length - 1];
        lastObj['endDate'] =  moment(startDate).format('MM/DD');
        lastObj['label'] = `${lastObj.startDate} - ${lastObj['endDate']} (week${weekData.length})`
        startDate.add(1, 'days');
    }
    weekData.push({startDate: moment(startDate).format('MM/DD')});
    startDate.add(6, 'days');
}
if(startDate.isAfter(endDate)) {
    // Update last object
    let lastObj = weekData[weekData.length - 1];
    lastObj['endDate'] =  moment(endDate).format('MM/DD');
    lastObj['label'] = `${lastObj.startDate} - ${lastObj['endDate']} (week${weekData.length})`
}
console.log(weekData)
return weekData;
}

请帮助您了解如何将 endDate 限制为自开始日期起 31 天?

https://plnkr.co/edit/6rU39T0vIPVQkFnydKbC?p=preview

【问题讨论】:

  • 你为什么要转动片刻,变成一根弦然后又回到片刻? while 循环是做什么用的?
  • 我已经更新了我的代码

标签: javascript typescript


【解决方案1】:

检查范围是否大于 31 天,而不是使用 add 方法

weekByDates() 
{ 
  let dates = JSON.parse(localStorage.getItem('getDates')); 
  let stDate = moment((dates[0].value)).format('YYYY-MM-DD'); 
  let eDate = moment((dates[1].value)).format('YYYY-MM-DD'); 
  let startDate = moment(stDate); 
  let endDate = moment(eDate); 
  if(eDate.diff(stDate, 'days')>31)
    endDate = moment(stDate).add(31, 'days'); 
  let weekData = [];      while(startDate.isSameOrBefore(endDate)) 
{ .... }

【讨论】:

  • 能否添加控制台日志并检查哪个部分没有具体工作
  • 添加 plunkar 项目
  • 用你的代码{startDate: "02/19", endDate: "02/19", label: "02/19 - 02/19 (week1)"} 我只得到错误的onw记录
  • 请检查 plukar
  • 现在我编辑了,你可以查看控制台日志来查看结果
【解决方案2】:

您可以使用 add() 函数限制天数,

weekByDates() {
  let dates = JSON.parse(localStorage.getItem('getDates'));
  let stDate = moment((dates[0].value)).format('YYYY-MM-DD');
  let eDate = moment((dates[1].value)).format('YYYY-MM-DD');

  let startDate = moment(stDate);
  let endDate = moment(stDate.add(31, 'days'));
  let weekData = [];
  while(startDate.isSameOrBefore(endDate)) {
    ....
}

希望对你有帮助。

【讨论】:

  • OP 仅当范围大于 31 天时才需要将结束日期设置为 31,即使范围小于 31,您的解决方案也会将结束日期设置为 31
【解决方案3】:

我用这个判断

if(endDate.diff(startDate, 'days') > 31){
//More than 31 days
}

【讨论】:

  • 这如何回答这个问题?
猜你喜欢
  • 2021-11-11
  • 1970-01-01
  • 2021-09-23
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多