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

时间:2012-07-13 11:49:30

标签: javascript date datepicker monthcalendar

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

如果我选择5月31日并滚动到下个月,我将在7月1日结束。 DateObject infact在5月31日之前点击按钮以激活“jumpToNextMonth”函数。 我假设dateObject跳转到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);
  3. 我在这里找到了类似的未回答的问题 Flex Mobile 4.6: DateSpinner dateAndTime jumping from Jan 31st to March 1st

1 个答案:

答案 0 :(得分:0)

您已回答了自己的问题。 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);