2758. 下一天 🔒
2758. 下一天 🔒
题目
Write code that enhances all date objects such that you can call the date.nextDay()
method on any date object and it will return the next day in the format YYYY-MM-DD as a string.
Example 1:
Input: date = "2014-06-20"
Output: "2014-06-21"
Explanation:
const date = new Date("2014-06-20");
date.nextDay(); // "2014-06-21"
Example 2:
Input: date = "2017-10-31"
Output: "2017-11-01"
Explanation: The day after 2017-10-31 is 2017-11-01.
Constraints:
new Date(date)
is a valid date object
题目大意
请你编写一个有关日期对象的方法,使得任何日期对象都可以调用 date.nextDay()
方法,然后返回调用日期对象的下一天,格式为 YYYY-MM-DD 。
示例 1:
输入: date = "2014-06-20"
输出: "2014-06-21"
解释:
const date = new Date("2014-06-20");
date.nextDay(); // "2014-06-21"
示例 2:
输入: date = "2017-10-31"
输出: "2017-11-01"
解释: 日期 2017-10-31 的下一天是 2017-11-01.
Constraints:
new Date(date)
是一个有效的日期对象
解题思路
- 扩展 Date 对象:通过
Date.prototype
向Date
对象的原型添加了一个新的方法nextDay
,使得所有的Date
实例都可以调用该方法。 - 创建新的日期对象:通过
new Date(this)
创建一个新的日期对象,确保不会修改原始的日期对象this
,而是返回一个新的日期实例。 - 获取当前日期的下一天:可以使用
Date
对象的内置方法getDate()
方法获取当前日期的日(1-31),然后通过setDate()
设置为当前日期加 1,从而获取下一天的日期。 - 格式化输出为
YYYY-MM-DD
:使用toISOString()
方法来获取标准的 ISO 格式日期(例如:2024-11-04T00:00:00.000Z
),然后从中提取YYYY-MM-DD
部分。
复杂度分析
- 时间复杂度: 每次调用
nextDay()
是O(1)
,只修改日期并格式化输出。 - 空间复杂度:
O(1)
,没有使用额外的空间。
代码
// 扩展 Date.prototype,添加 nextDay 方法
Date.prototype.nextDay = function () {
// 创建一个新的 Date 实例,避免修改原始日期对象
const nextDay = new Date(this);
// 设置为下一天
nextDay.setDate(this.getDate() + 1);
// 返回格式化的 YYYY-MM-DD 格式的日期
return nextDay.toISOString().split('T')[0]; // 只提取 YYYY-MM-DD 部分
};