我有两个日期:开始日期和结束日期 开始日期=“ 10/10/2018”结束日期=“ 03/09/2019”
我正在尝试在这两个日期之间创建一个日期数组。我有以下代码。
function getDateArray (start, end) {
var arr = [];
var startDate = new Date(start);
var endDate = new Date(end);
endDate.setMonth( endDate.getMonth());
while (startDate <= endDate) {
arr.push(new Date(startDate));
startDate.setMonth(startDate.getMonth() + 1);
}
return arr;
}
然后计算这两个月之间的天数。 10/10/2018至11/10/2018 = 30天 11/10/2019至12/10/2018 = 30天左右,具体取决于两个日期之间的天数,然后创建日期数组。
[30,30,31 ....至结束日期]
function daysBetween(date1, date2 )
{
var timeDiff = Math.abs(date2.getTime() - date1.getTime());
var dayDifference = Math.ceil(timeDiff / (1000 * 3600 * 24));
return dayDifference;
}
我尝试了以下代码,但它返回的是日期数数组,但这并不准确。它在十月份继续返回32天。现在给出的输出如下。我不确定在这里我做错了什么,但看起来直到2月才显示结果。
任何帮助将不胜感激。谢谢。
Output: [32,30,31,31,28]
var dateArr = getDateArray(z, y);
console.log(dateArr);
var dayCounts = "";
for (var x = 0; x < dateArr.length-1; x++)
{
dayCounts += daysBetween(dateArr[x], dateArr[x+1]);
}
console.log("datearrlength" + dateArr.length);
console.log(dayCounts);
答案 0 :(得分:0)
我认为这对您有用,
Date.prototype.addDay= function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
function getDateBwStartandEnd(sdate, edate) {
var dateArray = new Array();
var currentDate = sdate;
while (currentDate <= edate) {
dateArray.push(new Date (currentDate));
currentDate = currentDate.addDay(1);
}
return dateArray;
}
**从网上无耻复制,但这对我来说很好。
答案 1 :(得分:0)
尽管以下内容没有回答您的问题,但这是您要解决的总体问题的替代方法。
一种方法是简单地获取两个日期之间的时差,然后除以一天中的微秒数。您会注意到,虽然它并不精确,所以使用地板来获取时间。这种方法还有其他一些问题,例如时代之前的日期范围,但这是一种非常简单的方法,并且可能会根据您的需求起作用。
const startDate = '10/10/2018';
const endDate = '03/09/2019';
const start = (new Date(startDate)).valueOf();
const end = (new Date(endDate)).valueOf();
const timeBetween = end - start;
console.log({timeBetween, days: Math.floor(timeBetween/86400000)});
从本质上讲,更可靠的方法是使用一个计数器,该计数器通过在计数器的开始日期小于结束日期的同时向计数器和开始日期加1天来增加自身计数。再次,这种方法存在一些问题,但这还取决于您的需求。
const startDate = '10/10/2018';
const endDate = '03/09/2019';
let start = new Date(startDate);
const end = (new Date(endDate)).valueOf();
let daysBetween = 0;
while (start.valueOf() < end) {
daysBetween++;
start.setDate(start.getDate() + 1);
}
console.log(daysBetween);
最后,为了避免操作和处理日期时出现各种问题,一种更强大的解决方案是使用momentjs之类的库。使用其difference
method如下所示。
const start = moment([2018, 10, 10]);
const end = moment([2019, 3, 9]);
console.log(end.diff(start, 'days'));
<script src="http://momentjs.com/downloads/moment.min.js"></script>
答案 2 :(得分:0)
使用以下代码对我有用。我在结束日期后增加了1个月,它给出了正确的日期范围。另外,我使用Math.round代替Math.ceil,它给出了正确的日期数。
package com.example.admin.economizate;
public class ViewHolder extends RecyclerView{
}