gpt4 book ai didi

javascript - 移动到下个月时,将日期添加到 javascript 日期对象不起作用

转载 作者:行者123 更新时间:2023-11-29 10:54:10 24 4
gpt4 key购买 nike

我在使用 javascript 日期对象时遇到问题,特别是在尝试向日期对象添加日期时。我正在编写的函数需要一个开始日期并创建一个 future 7 天的列表,用作“周 View ”日历应用程序的标题。当它确定的星期日期在同一个月内时,我的函数将按预期工作。移至下个月时,情况会变得不稳定。

我的日期列表生成函数(注意:.toHdr() 方法是我创建的自定义日期方法,.clone() 也是):

getWeekDates : function(date){                                  
/*
* Given a date object, returns a list of dates strings that
* become the header of the week view
*/
var _d = date.clone(), dates = [];
for(var i=1; i<=7; i++){
dates.push(_d.toHdr());
_d.setDate(date.getDate() + i);
}
return dates;
}

当传递给此函数的日期类似于“10 月 11 日星期一”(作为日期对象)时,上面的函数返回:

["Monday - Oct. 11, 2010", "Tuesday - Oct. 12, 2010", "Wednesday - Oct. 13, 2010", "Thursday - Oct. 14, 2010", "Friday - Oct. 15, 2010", "Saturday - Oct. 16, 2010", "Sunday - Oct. 17, 2010"]

但是,当传递“10 月 31 日星期日”这样的日期时,返回的列表如下所示:

["Sunday - Oct. 31, 2010", "Monday - Nov. 1, 2010", "Friday - Dec. 3, 2010", "Monday - Jan. 3, 2011", "Friday - Feb. 4, 2011", "Tuesday - Mar. 8, 2011", "Wednesday - Apr. 6, 2011"]

显然,在移动到另一个月时,一次向日期对象添加一天会出现问题,我只是不确定如何解决它。有什么想法吗?

编辑:

Date.prototype.toHdr = function(){
/*
* Convenience method for creating a formatted string that will be used in
* all headers with a specific date.
*/
var dayMapping = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
var monthMapping = ['Jan.','Feb.','Mar.','Apr.','May','June','July','Aug.','Sept.','Oct.','Nov.','Dec.'];
return dayMapping[this.getDay()] + ' - ' + monthMapping[this.getMonth()] + ' ' + this.getDate() + ', ' + this.getFullYear();

};

Date.prototype.clone = function(){
/*
* Clone a date object, useful for creating a copy of a date, so the
* original isn't modified.
*/
return new Date(this.getTime());
}

最佳答案

在循环内,您使用提供的date 作为every setDate() 的引用点:

_d.setDate(date.getDate() + i);

date 是 10 月的最后一天 (31) 并且 i 是 1 时,这会将 _d day-of-month 设置为32 日 - 即 11 月 1 日。在下一次迭代中,您将 _d 的日期设置为 (31+2),但请记住 _d 现在是 11 月 - 所以日期提前到 12 月 3 日。在随后的迭代中,您的步长每月增加一天,因此您的结果。您可以改为在 _d 上调用 getter 吗?在这种情况下,您可以先设置为 32,然后再设置为 2、3 等,而不是将月中的某天设置为 32、33、34 等天。

关于javascript - 移动到下个月时,将日期添加到 javascript 日期对象不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3910043/

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