1507. 转变日期格式
1507. 转变日期格式
题目
Given a date
string in the form Day Month Year
, where:
Day
is in the set{"1st", "2nd", "3rd", "4th", ..., "30th", "31st"}
.Month
is in the set{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}
.Year
is in the range[1900, 2100]
.
Convert the date string to the format YYYY-MM-DD
, where:
YYYY
denotes the 4 digit year.MM
denotes the 2 digit month.DD
denotes the 2 digit day.
Example 1:
Input: date = "20th Oct 2052"
Output: "2052-10-20"
Example 2:
Input: date = "6th Jun 1933"
Output: "1933-06-06"
Example 3:
Input: date = "26th May 1960"
Output: "1960-05-26"
Constraints:
- The given dates are guaranteed to be valid, so no error handling is necessary.
题目大意
给你一个字符串 date
,它的格式为 Day Month Year
,其中:
Day
是集合{"1st", "2nd", "3rd", "4th", ..., "30th", "31st"}
中的一个元素。Month
是集合{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}
中的一个元素。Year
的范围在 [1900, 2100]
之间。
请你将字符串转变为 YYYY-MM-DD
的格式,其中:
YYYY
表示 4 位的年份。MM
表示 2 位的月份。DD
表示 2 位的天数。
示例 1:
输入: date = "20th Oct 2052"
输出: "2052-10-20"
示例 2:
输入: date = "6th Jun 1933"
输出: "1933-06-06"
示例 3:
输入: date = "26th May 1960"
输出: "1960-05-26"
提示:
- 给定日期保证是合法的,所以不需要处理异常输入。
解题思路
- 月份映射:使用对象
months
将月份的英文缩写映射到对应的数字(例如"Jan"
映射为"01"
)。这样做可以方便快速查找。 - 拆分日期:通过
split(' ')
将日期字符串拆分为day
、month
和year
。 - 处理日期的后缀:使用
slice(0, day.length - 2)
去除日期中的后缀(如st
、nd
、rd
、th
)。 - 补零处理:确保日期总是两位数,如果日期只有一位数(如
1
),则在前面加上零。 - 返回格式化后的日期:通过模板字符串,将
year
、month
和day
组合成所需的"yyyy-mm-dd"
格式返回。
复杂度分析
- 时间复杂度:
O(1)
,对日期进行切割和字符串操作的时间复杂度是O(1)
,因为只涉及固定长度的字符串。 - 空间复杂度:
O(1)
,months
对象是常量大小的映射。
代码
/**
* @param {string} date
* @return {string}
*/
var reformatDate = function (date) {
// 将月份的英文缩写与数字对应起来
const months = {
Jan: '01',
Feb: '02',
Mar: '03',
Apr: '04',
May: '05',
Jun: '06',
Jul: '07',
Aug: '08',
Sep: '09',
Oct: '10',
Nov: '11',
Dec: '12'
};
// 拆分输入日期
let [day, month, year] = date.split(' ');
// 去掉日期中的后缀(例如 "1st" -> "1")
day = day.slice(0, day.length - 2);
// 如果日期是单数,则前面补零
if (day.length < 2) {
day = '0' + day;
}
// 返回按要求格式化后的日期
return `${year}-${months[month]}-${day}`;
};