一年中的第几天
给你一个按 YYYY-MM-DD 格式表示日期的字符串 date,请你计算并返回该日期是当年的第几天。
通常情况下,我们认为 1 月 1 日是每年的第 1 天,1 月 2 日是每年的第 2 天,依此类推。每个月的天数与现行公元纪年法(格里高利历)一致。
示例 1:
输入:date = “2019-01-09”
输出:9
示例 2:
输入:date = “2019-02-10”
输出:41
示例 3:
输入:date = “2003-03-01”
输出:60
示例 4:
输入:date = “2004-03-01”
输出:61
提示:
- date.length == 10
- date[4] == date[7] == ‘-’,其他的 date[i] 都是数字。
- date 表示的范围从 1900 年 1 月 1 日至 2019 年 12 月 31 日。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/day-of-the-year
function date(str) {
//将传入的字符串按照符号-分割
let arr = str.split('-');
//获取年月日
let year = parseInt(arr[0]);
let mouth = parseInt(arr[1]);
let day = parseInt(arr[2]);
//定义数组,数组中的值为每个月有多少天
let mapArr = [31,28,31,30,31,30,31,31,30,31,30,31];
//判断是否是闰年,如果是,设置二月为29天
if (year % 4 === 0 && year % 100 != 0 || year % 400 === 0){
mapArr[1] = 29;
}
//定义结果
let result = 0;
//计算该月份之前的月份的天数和,如3月,这里计算1月天数加2月天数的和
for(let i = 0; i < mouth - 1; i++) {
result += mapArr[i];
}
//结果上再次累加当前月的当前日
result += day;
return result;
}
在控制台测试结果:
一周中的第几天
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数:day
、month
和 year
,分别表示日、月、年。
您返回的结果必须是这几个值中的一个 {"Sunday
", “Monday
”, “Tuesday
”, “Wednesday
”, “Thursday
”, “Friday
”, “Saturday
”}。
示例 1:
输入:day = 31, month = 8, year = 2019
输出:“Saturday”
示例 2:
输入:day = 18, month = 7, year = 1999
输出:“Sunday”
示例 3:
输入:day = 15, month = 8, year = 1993
输出:“Sunday”
提示:给出的日期一定是在 1971 到 2100 年之间的有效日期。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/day-of-the-week
方案一
使用土办法,计算出这一年距离1971年1月1日有多少天,最后使用结果减1模7得到,然后判断这一天是星期几
var dayOfTheWeek = function (day, month, year) {
//设置初始值,年份,天,月
let y = 1971, d = 0, m = 0, res = 0;
//使用数组存储每个月有几天
let monday = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
//如果年份大于1971,判断是否是闰年,如果是闰年结果加366,不是闰年,结果加365
for (; y < year; y++) {
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) res += 366;
else res += 365;
}
//判断要计算的这一年是不是闰年
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) monday[1] = 29;
//结果累加这个月之前月份的天数
for (; d < month - 1; d++) {
res += monday[d];
}
res += day;
res = (res - 1) % 7;
switch (res) {
case 0:
return "Friday";
case 1:
return "Saturday";
case 2:
return "Sunday";
case 3:
return "Monday";
case 4:
return "Tuesday";
case 5:
return "Wednesday";
case 6:
return "Thursday";
default: break;
}
return "";
};
方案二
var dayOfTheWeek = function (day, month, year) {
let arr = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
//获取当前时间
let date = new Date()
//设置获取到当前的年份为传入的参数
date.setFullYear(year);
//设置获取到当年时间的月
date.setMonth(month - 1);
//设置天数
date.setDate(day);
//获取是星期几
return arr[date.getDay()];
};
在控制台测试结果
在上面的这段代码中用到了几个和日期对象相关的方法,列举如下:
方法 | 说明 |
---|---|
getFullYear(年) | 设置日期的年份,传入的年份值必须是四位数组(如2008,绝非08) |
setMonth(月) | 设置日期的月份,传入的月份值必须大于0,否则增加年份 |
setDate(日) | 设置日期月份中的天数.如果传入的值超过了该月中应有的天数,则增加月份 |
getDay() | 返回日期中星期的星期几(其中0表示星期日,6表示星期六) |
值得注意的是最后一个getDay()
方法,这个方法获取的是星期,而不是天数.
了解更多方法戳链接https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date