leetCode题目 —— 一年中的第几天和一周中的第几天(JavaScript)

一年中的第几天

给你一个按 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

提示:

  1. date.length == 10
  2. date[4] == date[7] == ‘-’,其他的 date[i] 都是数字。
  3. 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;
        }

在控制台测试结果:
在这里插入图片描述

一周中的第几天

给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。

输入为三个整数:daymonthyear,分别表示日、月、年。

您返回的结果必须是这几个值中的一个 {"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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值