Javascript日期对象:从5月31日跳到下个月得到7月1日

Javascripts dateObject: jump from May 31st to next month gets July 1st

本文关键字:下个月 7月 1日 31日 对象 日期 5月 Javascript      更新时间:2023-09-26

我不得不为客户端构建一个没有任何库(如jQuery)的DatePicker。我在本地机器上成功了。然而,我的客户现在正在使用它,如果它包含在他的网络应用程序中,它会显示出一些奇怪的行为。

如果我选择5月31日并滚动到下个月,我将在7月1日结束。在我点击按钮启动"jumpToNextMonth"功能之前,DateObject的实际时间是5月31日。我假设日期Object跳到6月31日,这是不存在的,然后再向前跳到7月1日。这种情况也发生在8月和其他所有30天的月份,之后是31天的月份。

点击时激发的行是

this.currentDate = new Date(this.currentDate.getFullYear(),
                           this.currentDate.getMonth() + 1,
                           this.currentDate.getDate());

我在本地机器上没有看到这种行为,也没有看到它在运行apache服务器。我无法想象是什么破坏了我客户网络应用程序上的日期对象,不幸的是,我无法访问他们的文件。

如果你能帮我回答这两个问题,我将不胜感激:

  1. 为什么它没有发生在我的本地机器上
  2. 如何在不将Day设置为"1"的情况下修复它,例如this.currentDate = new Date(this.currentDate.getFullYear(), this.currentDate.getMonth() + 1, 1);

我在这里发现了类似的未回答的问题Flex Mobile 4.6:DateSpinner dateAndTime从1月31日跳至3月1日

您已经回答了自己的问题。对象中的6月31日实际上是7月1日。

这能解决你的问题吗?

function daysInMonth(month, year)
{
    return 32 - new Date(year, month, 32).getDate();
}
var y = this.currentDate.getFullYear();
var m = this.currentDate.getMonth() + 1;
var d = Math.min(this.currentDate.getDate(), daysInMonth(m, y);
this.currentDate = new Date(y, m, d);