繁体   English   中英

如何根据月份和年份获取日期名称和天数

[英]How to get the Day names and Number of days based on month and year

我想根据月份和年份获取周名称(星期日、星期一、星期二...)和天数...

 daysInMonth(month, year) { return new Date(year, month, 0).getDate(); } let dys = this.daysInMonth(this.selected_from.getMonth() + 1, selected_year); for (let a = 1; a <= dys; a++) { console.log(a, 'a') } console.log(dys, 'dys');

通过使用此代码,我可以获得天数,但如何获取周名?

也许是这样的:

getDayNames(year: number, month: number) {
    var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
    var daysInMonth = new Date(year, month, 0).getDate();
    for (let i = 1; i <= daysInMonth; i++) {
        var d = new Date(year, month, i);
        var dayName = days[d.getDay()];
        console.log(i + ' ' + dayName);
    }
}

编辑

由于飞蛾被声明为 0-11 而不是 1-12,我编辑了代码,因此您可以在 1 月输入 1,在 2 月输入 2 等等......

getDayNames(year: number, month: number) {
    var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
    var daysInMonth = new Date(year, month, 0).getDate();
    for (let i = 1; i <= daysInMonth; i++) {
        var d = new Date(year, month - 1, i);
        var dayName = days[d.getDay()];
        console.log(i + ' ' + dayName);
    }
 }

使用moment.js进行此类* 日期操作。

以下是如何使用 moment.js 按月份和年份获取日期名称

 const getDayNames = (month, year) => { const daysInMonth = moment(`${month}-01-${year}`, 'MM-DD-YYYY').daysInMonth() const names = [] for (let i = 1; i <= daysInMonth; i++) { let date = moment(`${month}-${i}-${year}`, 'MM-DD-YYYY') let dayName = date.format('dddd') names.push(`${dayName} - ${date.format('MM-DD-YYYY')}`) } return names } console.log(getDayNames(5, 2018))
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js"></script>

* 我们应该使用外部库吗?

与往常一样,在这里我们可以为您提供非常通用的解决方案,而无需了解全局(上下文)。 这取决于你自己的体重 - 应该或不应该使用日期库。 如果您的应用程序依赖于复杂的日期操作 - 因此最好使用一个。

根据你的情况(不知道上下文),应该或不应该是有争议的。 这不是一个复杂的功能,但我个人更喜欢使用它,原因如下:

  1. 正如您在代码片段中看到的,moment.js 为我们提供了工作日名称,您可以轻松地为您的用户启用本地化/国际化。
  2. 您使用 moment.js API 进行操作,它比Date() API 更简洁和命令式,这将降低出错的风险。

当您有复杂的日期操作时,使用日期库总是一个不错的决定,而不是编写自己的函数,因为您必须自己管理和考虑很多复杂性(在给定的时间点) )。

例如:

  • 您希望支持日期名称的国际化(根据用户的语言翻译日期名称)。
  • 日期操作(添加/减去天数)。
  • 日期格式。
  • 以及许多其他情况(隐藏在第一个标志上)

小心,请不要重新发明轮子,尤其是对于复杂的日期操作! :)

学分:

  1. 获取一个月内的日期
  2. 获取日期名称
function myFunction() {
    var d = new Date();
    var n = d.getDay();
    var day = "";
    switch(n) {
    case 0:
        day = "Sunday";
        break;
    case 1:
        day = "Monday";
        break;
    case 2:
        day = "Tuesday";
        break;
    case 3:
        day = "Wednesday";
        break;
    case 4:
        day = "Thursday";
        break;
    case 5:
        day = "Friday";
        break;
    case 6:
        day = "Saturday";
        break;
    default:
        // do something
        break;
}
    document.getElementById("demo").innerHTML = day;
}

参考: https : //www.w3schools.com/jsref/jsref_getday.asp

我编写了这个函数,它为一个月中的每一天创建一个矩对象列表。 可以优化线条,但为了清晰起见,请保持简单。

// function that gets all the days in a month with the corresponding arguments passed in
    // Year, Month arguments are specified by the user, pass in the year in the month to find out the total amout of days in that month.
    getDaysArrayByMonth(year,month){
        // adding one to month because when you call moment.month() it returns 0-11 months instead of 1-12
        const monthNum = month + 1;
        // create moment object with formatted string
        const year_month_string = monthNum.toString()+"-"+year.toString();  
        const FirstDayofMonth = moment(year_month_string,"MM-YYYY");

        // find the number of days in the month from the moment object
        var daysInMonth = FirstDayofMonth.daysInMonth();
        
        // arr which will store all days in the month
        var daysArr = [];
        // create dayint variable to increment day of the month
        var dayInt = 1;
        // create string for creating moment object, will modify it in a loop to access all days of that month
        var curDayofMonthString = "0"+dayInt.toString()+"-"+monthNum.toString()+"-"+year.toString();
        // create moment obj with curDayofMonthString
        var curDayofMonth = moment(curDayofMonthString,"DD-MM-YYYY");
        
        // loop for total number of days in month to append all days to daysArr
        while(daysInMonth){
            // append day
            daysArr.push(curDayofMonth);
            // inc day and format string depending if day is doble digits or not
            dayInt++;
            if(dayInt > 9){
                curDayofMonthString = dayInt.toString()+"-"+monthNum.toString()+"-"+year.toString();
            }else{
                curDayofMonthString = "0"+dayInt.toString()+"-"+monthNum.toString()+"-"+year.toString();
            }
            // create new moment obj
            curDayofMonth = moment(curDayofMonthString,"DD-MM-YYYY");
            daysInMonth--;
        }
        // return array with information on the month
        return daysArr;
    }

然后您可以访问这样的日子

Array.from(MomentObjDaysInMonthArray).forEach(obj =>{
    console.log(obj.day());
});

其中: 0:星期日 1:星期一 2:星期二 3:星期三 4:星期四 5:星期五 6:星期六

暂无
暂无

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

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