【问题标题】:Split a datetime range in individual day slots e.g. access the number of minutes for each individual day present in a datetime range将日期时间范围拆分为单独的日期时间段,例如访问日期时间范围内每一天的分钟数
【发布时间】:2019-04-22 10:41:49
【问题描述】:

我在 javascript 中有一个开始日期对象和一个结束日期对象,例如

var startDate = moment("2019-04-22T09:20:00+05:00");
var endtDate = moment("2019-04-25T11:00:00+05:00");

现在我想要这样的输出

[880,1440,660] //array for the numbers of minutes for each day present in the given range

我已经尝试了使用矩范围模块的东西,但仍然是徒劳的

提前感谢您的帮助

【问题讨论】:

  • 你能解释一下你的输出是如何计算的吗?
  • 在索引零处:距离第二天开始还有 14 小时 40 分钟;将其转换为分钟,您将拥有 880
  • 这 600 个从何而来
  • 从 25 日到上午 11:00 已经过了 600 分钟
  • 我认为是 660

标签: javascript datetime momentjs date-range moment-range


【解决方案1】:

试试这个代码。

var startDate = moment("2019-04-22T09:20:00+05:00");
var endDate = moment("2019-04-25T11:00:00+05:00");

var duration = moment.duration(endDate.diff(startDate));
var days = Math.round(duration.asDays());


var start,end;
var minutes = [];

for(i = 0; i<=days; i++){
  if(i == 0){
    start = startDate;
    end = moment(startDate).endOf("day").utcOffset("+05:00");
  }else if(i == days){
    start = moment(endDate).startOf('day').utcOffset("+05:00");
    end = endDate;
  } else {
    start = moment(startDate).add('days', i).startOf('day').utcOffset("+05:00");
    end = moment(startDate).add('days', i).endOf('day').utcOffset("+05:00");
  }
  
  var duration = moment.duration(end.diff(start));
  var min = duration.asMinutes();

  minutes.push(Math.round(min))
}

console.log(minutes)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

【讨论】:

  • 我会更新你的代码以支持用户的本地时区
  • 如果你提供不同的时间和相同的日期,那么输出是错误的,但我明白你的意思,所以我接受你的解决方案
【解决方案2】:

试试这个代码,只需计算开始日期和结束日期的分钟数,然后通过计算两个日期之间的天数来推动日期之间的 1440 分钟

function getMinutes(dt1, dt2) {
  minuteArray = [];

  // hours*minutes*seconds*milliseconds
  var oneDay = 24 * 60 * 60 * 1000; 

  startHours = (24 - dt1.getHours())
  if (dt1.getMinutes() > 0) {
    startHours--;
  }

  // Calculate Minutes for start date
  startDayMin = startHours * 60 + (60 - dt1.getMinutes());

  minuteArray.push(startDayMin);
  var diffDays = Math.round(Math.abs((dt1.getTime() - dt2.getTime()) / (oneDay))) - 1; //Calculate number of days

  for (i = 0; i < diffDays; i++) {
   
    //Push minutes for number of days
    minuteArray.push(1440);

  }

 if (diffDays >= 0){
   // Calculate Minutes for end date
    endDayMin = (dt2.getHours()* 60) + dt2.getMinutes();

    minuteArray.push(endDayMin)
}
  return minuteArray;
}



var startDate = new Date("2019-04-22T09:20:00+05:00");
var endtDate = new Date("2019-04-25T11:00:00+05:00");
console.log(getMinutes(startDate, endtDate));

【讨论】:

  • 尝试提供不同时间的相同日期,输出返回一个长度为2的数组。
猜你喜欢
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 2023-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 2023-03-08
相关资源
最近更新 更多