跳至主要內容

2758. 下一天 🔒


2758. 下一天 🔒

🟢   🔗 力扣open in new window LeetCodeopen in new window

题目

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) 是一个有效的日期对象

解题思路

  1. 扩展 Date 对象:通过 Date.prototypeDate 对象的原型添加了一个新的方法 nextDay,使得所有的 Date 实例都可以调用该方法。
  2. 创建新的日期对象:通过 new Date(this) 创建一个新的日期对象,确保不会修改原始的日期对象 this,而是返回一个新的日期实例。
  3. 获取当前日期的下一天:可以使用 Date 对象的内置方法 getDate() 方法获取当前日期的日(1-31),然后通过 setDate() 设置为当前日期加 1,从而获取下一天的日期。
  4. 格式化输出为 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 部分
};