如何在 JavaScript 中将日期增加一个月?接收未捕获的 TypeError [关闭]

Posted

技术标签:

【中文标题】如何在 JavaScript 中将日期增加一个月?接收未捕获的 TypeError [关闭]【英文标题】:How to increment date by one month in JavaScript? Receiving Uncaught TypeError [closed] 【发布时间】:2019-02-24 20:48:42 【问题描述】:

我有一个Bootstrap datepicker,其中选择了日期。单击按钮New Date 后,在datepicker 中选择的date 应增加一个月。

我有以下代码:

function getNewDate()
    var date = new Date();
    date = $("#selectedDate").val();
    // alert(date);
    var newDate = new Date();
    newDate = date.setMonth(date.getMonth()+1);
    // alert(newDate);

但是,在执行此操作时,我收到以下错误:

未捕获的类型错误:date.getMonth 不是函数

我哪里出错了?

【问题讨论】:

您创建了一个 Date 实例,但随后您立即用元素的值覆盖它。 @DavidG 不,这很好用; Date API 可以正确处理该问题,您会得到明年 1 月的日期。 date = $("#selectedDate").val(); date 中存储了一个字符串,而不是您可能期望的Date 对象。 @DavidG 它在实践中非常有用。 @DavidG:或者非常方便。无论d 是什么日期,d.setMonth(d.getMonth() + 10) 都可以正常工作。 【参考方案1】:

jQuery .val() 返回一个字符串,然后必须对其进行解析。下面的代码假定它实际上是可以解析的格式。最好使用yyyy-mm-dd

此外,重要的是要知道date.setMonth(...) 会更改底层date 对象。

另请注意,“不可能的日期”会滚动到下个月,例如在源日期2018-10-31 上执行date.setMonth(11) 将导致“不可能的日期”2018-11-31,然后变为2018-12-01

演示:

function getNewDate() 
  var str = $("#selectedDate").val(); // get string
  console.log(str);

  var date = new Date(str); // parse string
  console.log(date);

  date.setMonth(date.getMonth() + 1); // change date
  console.log(date);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input id="selectedDate" value="2018-12-20" />
<button onclick="getNewDate()">Add month</button>

【讨论】:

由于 OP 提到它是一个 Bootstrap 日期选择器,this 可能是相关的。

以上是关于如何在 JavaScript 中将日期增加一个月?接收未捕获的 TypeError [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 JavaScript 中增加日期

如何在javascript中将当前日期时间与另一个日期时间进行比较

如何在python中将字符串日期(2021年1月25日)转换为y-m-d日期(2021-01-01)

oracle中将原有的年、月、日个字段整合成日期形式插入数据库?

如何在 JavaScript 中将公历日期更改为波斯日期?

如何在java中将日期转换为2016年2月26日[重复]