gpt4 book ai didi

javascript - 使用 Date 对象查找一个月中的所有日期?

转载 作者:可可西里 更新时间:2023-11-01 01:26:37 28 4
gpt4 key购买 nike

有没有办法得到一个月或一年的所有日子?我正在寻找这个以禁用日期选择器中的某些特定日期,我会在后台有一个页面来选择要禁用的这些日期。

所以我需要显示一个月中的所有日期,并在每一天下方添加一个“激活或停用”按钮。有没有办法用 Date 对象找到这些日子?我找到了这个链接,例如:Displaying all the days of a month 但我不太明白,加上它是 Java,我正在尝试在 javascript 中找到解决方案。

谢谢你的帮助

最佳答案

要获取一个月中所有日期的列表,您可以从一个月的第一天开始,增加日期直到月份发生变化。

/**
* @param {int} The month number, 0 based
* @param {int} The year, not zero based, required to account for leap years
* @return {Date[]} List with date objects for each day of the month
*/
function getDaysInMonth(month, year) {
var date = new Date(year, month, 1);
var days = [];
while (date.getMonth() === month) {
days.push(new Date(date));
date.setDate(date.getDate() + 1);
}
return days;
}

UTC 版本

为了回应一些评论,我创建了一个使用 UTC 方法的版本,以防您想调用 UTC 方法而不是返回本地化时区的标准方法。

我怀疑这是评论说这不起作用的罪魁祸首。如果您使用 Date.UTC 实例化它,您通常希望确保调用 getUTCMonth/Day/Hours 方法,反之亦然,除非您尝试转换时区并显示差异。

function getDaysInMonthUTC(month, year) {
var date = new Date(Date.UTC(year, month, 1));
var days = [];
while (date.getUTCMonth() === month) {
days.push(new Date(date));
date.setUTCDate(date.getUTCDate() + 1);
}
return days;
}

编辑此答案

如果您认为此脚本有问题,请随时:

  • 首先查看下面的现有单元测试
  • 编写一个测试用例,证明它已损坏。
  • 修复代码,确保现有测试通过。

单元测试

/**
* @param {int} The month number, 0 based
* @param {int} The year, not zero based, required to account for leap years
* @return {Date[]} List with date objects for each day of the month
*/
function getDaysInMonthUTC(month, year) {
var date = new Date(Date.UTC(year, month, 1));
var days = [];
while (date.getUTCMonth() === month) {
days.push(new Date(date));
date.setUTCDate(date.getUTCDate() + 1);
}
return days;
}

function getDaysInMonth(month, year) {
var date = new Date(year, month, 1);
var days = [];
while (date.getMonth() === month) {
days.push(new Date(date));
date.setDate(date.getDate() + 1);
}
return days;
}

const days2020 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
const days2021 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

describe("getDaysInMonthUTC", function() {
it("gets day counts for leap years", function() {
const actual = days2020.map(
(day, index) => getDaysInMonthUTC(index, 2020).length
);
expect(actual).toEqual(days2020);
});

it("gets day counts for non-leap years", function() {
const actual = days2021.map(
(day, index) => getDaysInMonthUTC(index, 2021).length
);
expect(actual).toEqual(days2021);
});
});


describe("getDaysInMonth", function() {
it("gets day counts for leap years", function() {
const actual = days2020.map(
(day, index) => getDaysInMonth(index, 2020).length
);
expect(actual).toEqual(days2020);
});

it("gets day counts for non-leap years", function() {
const actual = days2021.map(
(day, index) => getDaysInMonth(index, 2021).length
);
expect(actual).toEqual(days2021);
});
});

// load jasmine htmlReporter
(function() {
var env = jasmine.getEnv();
env.addReporter(new jasmine.HtmlReporter());
env.execute();
}());
<script src="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine.js"></script>
<script src="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine-html.js"></script>
<link href="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine.css" rel="stylesheet"/>

关于javascript - 使用 Date 对象查找一个月中的所有日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13146418/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com