leetcode 算法题1154 (简单299) 一年中的第几天
- 题目介绍
给你一个按 YYYY-MM-DD 格式表示日期的字符串 date,
请你计算并返回该日期是当年的第几天。
通常情况下,我们认为 1 月 1 日是每年的第 1 天,
1 月 2 日是每年的第 2 天,依此类推。
每个月的天数与现行公元纪年法(格里高利历)一致。
- 示例
输入:date = “2019-01-09”
输出:9
输入:date = “2019-02-10”
输出:41
输入:date = “2003-03-01”
输出:60
输入:date = “2004-03-01”
输出:61
- 提示
date.length == 10
date[4] == date[7] == ‘-’,其他的 date[i] 都是数字。
date 表示的范围从 1900 年 1 月 1 日至 2019 年 12 月 31 日。
- 解法一
/**
* @param {string} date
* @return {number}
*/
var dayOfYear = function(date) {
let months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], dates = date.split('-'), year = parseInt(dates[0]), month = parseInt(dates[1]) - 1, day = parseInt(dates[2]);
months[1] += getLeapYearDay(year);
while(month > 0) {
day += months[--month];
}
return day;
};
const getLeapYearDay = year => {
if(year % 4) {
return 0;
}
if(year % 100) {
return 1;
}
if(year % 400) {
return 0;
}
return 1;
}
执行用时 : 60 ms, 在所有 JavaScript 提交中击败了98.24%的用户
内存消耗 : 33.8 MB, 在所有 JavaScript 提交中击败了100.00%的用户
- 解法二
/**
* @param {string} date
* @return {number}
*/
var dayOfYear = function(date) {
return (new Date(date) - new Date(new Date(date).getFullYear().toString())) / 1000 / 24 / 60 / 60 +1;
};
执行用时 : 76 ms, 在所有 JavaScript 提交中击败了68.72%的用户
内存消耗 : 34.4 MB, 在所有 JavaScript 提交中击败了100.00%的用户