当前位置: 首页 > 知识库问答 >
问题:

打字稿中两个日期之间的日期列表

桓瀚
2023-03-14

我试图在两天之间创建一个天数列表。

我创建了如下解决方案:

this.daysBetween = [];
while (dateFrom.getDate() !== dateTo.getDate()+1 ) {
    this.daysBetween.push(this.dateFrom);
    dateFrom.setDate(dateFrom.getDate()+1);
  }

但它只在90%的情况下有效(如果有月变化,它就不起作用)

例如,当我选择日期时:

dateFrom: 29 august
dateTo: 30 august 

从8月29日到9月30日,从8月31日,它给我打印了几天

有没有办法解决我的问题,或者有更好的办法?

编辑:

我的问题和建议的问题不同,因为在我的问题中,我有两个日期作为输入

例如

let dateFrom = new Date(2018, 9, 29);
let dateTo = new Date(2018, 9, 30);

在建议的重复结果,这可能是int号1

我的问题是如何循环两个日期之间的所有日期(dateFrom,dateTo)

其中,这两个日期示例的结果(dateFrom,dateTo)将列出两个元素:

Mon Oct 29 2018 00:00:00 GMT+0100
Tue Oct 30 2018 00:00:00 GMT+0100 

共有3个答案

翁文康
2023-03-14

Github上的Javascript版本

    class MyDate {
        dates: Date[];
        constructor() {
            this.dates = [];
        }

        private addDays(currentDate) { 
                let date = new Date(currentDate);
                date.setDate(date.getDate() + 1);
                return date;
        }

        getDates(startDate: Date, endDate: Date) { 
            let currentDate: Date = startDate;
            while (currentDate <= endDate) { 
                this.dates.push(currentDate);
                currentDate = this.addDays(currentDate);
            }

            return this.dates;
        }
    }

    let md = new MyDate();
    let daysBetween: Date[] = md.getDates(new Date(2018, 7, 22), new Date(2018, 8, 30));
    console.log(daysBetween);
淳于健
2023-03-14

你可以以毫秒为单位计算差值,然后将其转换为以天为单位的差值。

然后,您可以使用它来用Date对象填充数组:

const MS_PER_DAY: number = 1000 x 60 x 60 x 24;
const start: number = dateFrom.getTime();
const end: number = dateTo.getTime();
const daysBetweenDates: number = Math.ceil((end - start) / MS_PER_DAY);

// The days array will contain a Date object for each day between dates (inclusive)
const days: Date[] = Array.from(new Array(daysBetweenDates + 1), 
    (v, i) => new Date(start + (i * MS_PER_DAY)));
西门京
2023-03-14

你可以使用时刻的持续时间:

/**
 * Get an array of moment instances, each representing a day beween given timestamps.
 * @param {string|Date} from start date 
 * @param {string|Date} to end date
 */
function daysBetween(from, to) {
  const fromDate = moment(new Date(from)).startOf('day');
  const toDate = moment(new Date(to)).endOf('day');

  const span = moment.duration(toDate.diff(fromDate)).asDays();
  const days = [];
  for (let i = 0; i <= span; i++) {
    days.push(moment(fromDate).add(i, 'day').startOf('day'));
  }
  return days;
}

const days = daysBetween('29-Aug-2018', '30-Sep-2018');

console.info(days.map(d => d.toString()).join('\n'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
 类似资料:
  • 问题内容: 使用标准的mysql函数可以编写查询,该查询将返回两个日期之间的天数列表。 例如,给定2009-01-01和2009-01-13,它将返回一个具有以下值的列表: 编辑:看来我还不清楚。我要生成此列表。我在数据库中存储了值(按日期时间),但希望将它们在左外部联接中汇总到上述日期列表中(我希望这种联接的某些右侧在几天内会为null并将对此进行处理) )。 问题答案: 我将使用此存储过程将所

  • 问题内容: 我有两个这样的表: 表格1 表2 我想从 Table1中 选择并插入 Table2中 。 例如: 在表1中,我有这个 在表2中,我想要这个 带有样本数据的表结构 问题答案: 感谢您的架构。它使处理您的问题变得容易。我对您的架构进行了一些更改以利用auto_increment 在这里,我在emp_leave_daywise表上添加了唯一约束,因为id整数上的主键不能确保记录不重复。 em

  • 问题内容: 在我的应用程序中,用户应从选择日期。问题是生成此列​​表。例如,我需要 2010年至2013年 或 6月至8月 之间的所有日期(期间可能是 day , month , year )。是否有任何方法可以获取该数据? 范例:我需要 2013年1月1* 日 至2013年1月1 日之间的日期 * 2013年1月1日 2013年2月1日 2013年3月1日 2013年4月1日 2013年5月1日

  • 问题内容: 我需要一个查询,该查询将输出两个给定日期之间的日期列表。 例如,如果我的开始日期是2016年2月23日,结束日期是2016年2月3日,我期望获得以下输出: 另外,我只需要使用SQL进行上述操作(不使用“ WITH”语句或表)。请帮忙。 问题答案: 我使用的通常是DB2 for iSeries,所以我将为您提供一个仅适用于它的SQL解决方案。目前,我无法访问服务器,因此该查询未经测试,但

  • 问题内容: 我从Stackoverflow那里获得了这段代码,并对其进行了少许更改以适应今天的日期。 我想检查今天是否适合两个日期之间。但这是行不通的。我想念什么? 问题答案: 编辑: 使用<=或> =来计算今天的日期 这是您的代码的正确答案。只需使用strtotime()php函数

  • 问题内容: 我需要生成两个给定日期之间的所有日期。只要只有一个日期范围,此方法就可以正常工作。但是,如果我有多个日期范围,则此解决方案不起作用。我在这里以及Asktom上都进行了搜索,但是找不到相关的指针/解决方案。 我使用all_objects和CONNECT BY ROWNUM尝试了两种解决方案,但是没有运气。这是问题说明:sqlfiddle 输入 输出 问题答案: