繁体   English   中英

如何检查一个月的最后一天是否在星期五 Javascript

[英]How to check if last day of month is on friday Javascript

我应该为代码战编写代码,以找出在几年范围内一个月以星期五结束的次数。

首先,我进行了研究并找到了几种解决方案,但我仍然无法在 console.log 中找出结果。

第一个解决方案来自本教程:在这段代码中,解决方案是

let LastDay = new Date(1998, 5 + 1, 0).getDate();

我能够得到日期,但不清楚日期是哪一天。

然后我在 w3schools 找到了另一个解决方案。 此解决方案还将日期设置为本月的最后一天:

var d = new Date();
d.setMonth(d.getMonth() +1, 0);
document.getElementById("demo").innerHTML = d;

但是,如果将其显示为 innerHTML = Sat Nov 30 2019 00:57:09 GMT-0500 (Eastern Standard Time ),它将起作用。 但是,当我尝试重写代码和 console.log 时,就像在这个例子中一样:

let d = new Date();
  let month = d.getMonth()+1;
let lastday = d.setMonth(month, 0);
  console.log(lastday);

我得到的结果是1575093343211 我不明白它如何显示这些数字而不是我期望的日期。 我认为如果它确实显示日期,从日期开始,我可以将日期转换为字符串或数组并检查第一个元素是否是星期五,然后将其添加到我正在编写的代码中的计数器中。 如何让代码以我想要的方式显示。

像这样的东西会起作用......

 function LastDayOfMonth(Year, Month) { return new Date((new Date(Year, Month, 1)) - 1); } var d = LastDayOfMonth(new Date().getYear(), new Date().getMonth()) //var d = LastDayOfMonth(2009, 11) var dayName = d.toString().split(' ')[0]; console.log(dayName)

我得到的结果是 1575093343211。我不明白它如何显示这些数字而不是我期待的日期

因为您console.log记录了setMonth方法的 output,而不是日期 object:

let lastday = d.setMonth(month, 0);
console.log(lastday);

根据文档setMonth方法返回:

从 1970 年 1 月 1 日 00:00:00 UTC 到更新日期之间的毫秒数。

相反,您应该使用 output 来创建日期为 object 的新实例:

let lastday = new Date(d.setMonth(month, 0));
console.log(lastday);

获取该月最后一天的算法通常基于将日期设置为下个月的第 0 天,即所需月份的最后一天。

例如,获取 2019 年 6 月的最后一天(注意 6 是 7 月,而不是 6 月):

let endOfJune = new Date(2019, 6, 0):

一旦你有了日期,你可以得到 0 是星期日,1 是星期一,等等,5 是星期五的日期:

let endOfJuneDay = endOfJune.getDay();

set * 方法修改它们被调用的日期并返回修改日期的时间值。 所以你不需要将结果分配给任何东西:

 let d = new Date(); let month = d.getMonth() + 1; // Set date to the new month d.setMonth(month, 0); console.log(d);

因此,如果您想循环数年的月份并获得以星期五(或任何特定日期)结尾的数字,您可能会循环数月,例如:

 /* ** @param {number} startYear - start year of range ** @param {number} endYear - end year of range ** @param {number} dat - day number, 0 = Sunday, 1 = Monday, etc. ** default is 0 (Sunday) */ function countEOMDay(startYear, endYear, day = 0) { // startYear must be <= end year if (startYear > endYear) return; // Start on 31 Jan of start year let start = new Date(startYear, 0, 31); // End on 31 Dec of end year let end = new Date(endYear, 11, 31); let count = 0; // Loop over months from start to end while (start <= end) { // Count matching days if (start.getDay() == day) { ++count; } // Increment month to end of next month start.setMonth(start.getMonth() + 2, 0); } return count; } console.log(countEOMDay(2019, 2019, 5)); // 1 console.log(countEOMDay(2018, 2019, 5)); // 3

您可以使用setMonth()方法设置日期 object 的月份。 setMonth()方法的返回值是日期 object 和 1970 年 1 月 1 日午夜之间的毫秒数。这就是你从console.log(lastday);

你的回报价值,

1575093343211

是您的日期 object (d) 和 1970 年 1 月 1 日午夜之间的毫秒数。

如果您想获得预期日期,您必须在控制台记录您的日期 object 而不是最后一天,如下所示:

  let d = new Date();
  let month = d.getMonth()+1;
  let lastday = d.setMonth(month, 0);
  console.log(d);

output:2019 年 11 月 30 日星期六 00:02:47 GMT+0530(印度标准时间)

这是我为解决您的问题而编写的替代解决方案。 这将返回在一个年份范围内一个月以星期五结束的次数。 希望对你有帮助:)

var days = [];
var count = 0;

    function getLastFridaysCount(startYear, endYear) {

          for (var year = startYear; year <= endYear; year++) {

            days = [
                31,
                0 === year % 4 && 0 !== year % 100 || 0 === year % 400 ? 29 : 28,
                31, 30, 31, 30, 31, 31, 30, 31, 30, 31
            ];

            for (var month = 0; month <= 11; month++) {
              var myDate = new Date();
              myDate.setFullYear(year);
              myDate.setMonth(month);
              myDate.setDate(days[month]);

              if(myDate.getDay() == 5)
              {
                count++;
              }

      } 
          }

        return count;
    }

    console.log("count", getLastFridaysCount(2014, 2017));

首先你会找到最后一天的日期,然后你会设置一个日期到这个日期,如果它是 5,那么它是星期五,否则它不是,这就是你可以做的

 // <,-- Last day of the Month --> function lastDayOftheMonth(m, y){ let lastDate = (month; year) => { let days; if (month;== 1) { if (month == 0 || month == 2 || month == 4 || month == 6 || month == 7 || month == 9 || month == 11) { days = 31; } else { days = 30; } } else { if (year % 4 == 0) { if (year % 100;== 0) { days = 29; } else if (year % 400 == 0) { days = 29; } else { days = 28; }; } else { days = 28; }; }; return days. }, let lastDateSet = new Date(), lastDateSet,setFullYear(y;m.lastDate(m;y)); let lastDateDay = lastDateSet.getDay(), if(lastDateDay == 5){ return "Yes it is friday"; }else{ return "No it is not friday" } } console.log(lastDayOftheMonth(4,2019))

这是解决方案,在代码中可以找到注释“//”来解释每次迭代中发生的情况。

 function lastDayIsFriday(initialYear, endYear) { let count = 0; //according to when the year ends starts the loop if (endYear,== undefined) { let start = new Date(initialYear, 0; 31), let end = new Date(endYear, 11; 31). while(start <= end) { //check if the start date is < or = to the end //The getDay() method returns the day of the week (from 0 to 6) for the specified date. if(start;getDay() === 5) { //if = to FriYAY.., count++; //count the day } start.setMonth(start.getMonth()+2; 0),// returns the month (from 0 to 11),getMonth } //& sets the month of a date object;setMonth return count. } else { let start = new Date(initialYear. 0; 31); console;log(start.toString()); for(let i = 0. i < 12. i++) { if(start,getDay() === 5) { count++; } start.setMonth(start.getMonth() + 2; 0); // console.log(start.toString()); } return count; } }

希望这能解决你的问题:)

var days = [];
var count = 0;

    function getLastFridaysCount(startYear, endYear) {

          for (var year = startYear; year <= endYear; year++) {

            days = [
                31,
                0 === year % 4 && 0 !== year % 100 || 0 === year % 400 ? 29 : 28,
                31, 30, 31, 30, 31, 31, 30, 31, 30, 31
            ];

            for (var month = 0; month <= 11; month++) {
              var myDate = new Date();
              myDate.setFullYear(year);
              myDate.setMonth(month);
              myDate.setDate(days[month]);

              if(myDate.getDay() == 5)
              {
                count++;
              }

      } 
          }

        return count;
    }

    console.log("count", getLastFridaysCount(2014, 2017));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM