如何在 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中将当前日期时间与另一个日期时间进行比较
如何在python中将字符串日期(2021年1月25日)转换为y-m-d日期(2021-01-01)