【问题标题】:How to get the day of the week from the day number in JavaScript?如何从 JavaScript 中的天数获取星期几?
【发布时间】:2012-03-29 11:36:09
【问题描述】:

鉴于dayNumber 来自0 - 6 分别代表Monday - Sunday

Date/String 对象能否用于从dayNumber 获取星期几?

【问题讨论】:

标签: javascript string date


【解决方案1】:

这将根据您通过的索引为您提供一天:

var weekday=new Array(7);
weekday[0]="Monday";
weekday[1]="Tuesday";
weekday[2]="Wednesday";
weekday[3]="Thursday";
weekday[4]="Friday";
weekday[5]="Saturday";
weekday[6]="Sunday";
console.log("Today is " + weekday[3]);

输出“今天是星期四”

您还可以使用 getDay() 从 JavaScript 获取当前日期索引(但是在此方法中,星期日为 0,星期一为 1,等等):

var d=new Date();
console.log(d.getDay());

星期一时输出 1。

【讨论】:

  • var dayOfWeek = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
【解决方案2】:
/**
* I convert a day string to an number.
*
* @method dayOfWeekAsInteger
* @param {String} day
* @return {Number} Returns day as number
*/
function dayOfWeekAsInteger(day) {
  return ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"].indexOf(day);
}

【讨论】:

    【解决方案3】:

    此代码是上面给出的修改版本。它返回代表日期的字符串

    /**
    * Converts a day number to a string.
    *
    * @param {Number} dayIndex
    * @return {String} Returns day as string
    */
    function dayOfWeekAsString(dayIndex) {
      return ["Sunday", "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][dayIndex] || '';
    }
    

    例如

    dayOfWeekAsString(0) returns "Sunday"
    

    【讨论】:

    • 这是不正确的,因为getDay() 的实现始于Sunday。应该改为: return ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][dayIndex];
    【解决方案4】:

    这会将 getDayOfWeek() 函数作为原型添加到 JavaScript Date 类。

    Date.prototype.getDayOfWeek = function(){   
        return ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][ this.getDay() ];
    };
    

    【讨论】:

      【解决方案5】:

      一种更优雅的方式,如果您选择的话,还可以通过区域设置显示工作日,它可以启动最新版本的 ECMA 脚本,并且在所有最新的浏览器和 node.js 中运行:

      console.log(new Date().toLocaleString('en-us', {  weekday: 'long' }));

      【讨论】:

      • 只是对任何使用它的人的警告,它运作良好,但这是一种非常繁重的方法。仅当您需要转换的日期很少而不是在服务器端 nodejs 应用程序上时才使用它。如果您在 10k 日期上运行它,则需要很长时间并且存在内存泄漏。
      • @omer,您是否碰巧向节点团队提出了问题?我认为我们都可以从这种更快的工作中受益,并且没有内存泄漏。
      • 不,我还没有,但我现在就打开它,好主意。我设法用一个运行 10k 次的简单 while 循环来重现它。我不确定它是否真的是一个错误,或者只是这个函数对于这个特定的用例来说占用了大量资源。
      • 为了性能,MDN作者建议:“当格式化大量日期时,最好创建一个Intl.DateTimeFormat对象并使用其format属性提供的函数。”来源:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
      • 可能想要使用navigator.language 而不是'en-us'。因此,用户以她选择的语言获得她的星期一。
      【解决方案6】:
      let today= new Date()
      
      //Function To Convert Day Integer to String
      
      function daysToSrting() {
        const daysOfWeek = ['Sunday', 'Monday','Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
        return daysOfWeek[today.getDay()]
      }
      
      console.log(daysToSrting())
      

      【讨论】:

      • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的答案以添加解释并说明适用的限制和假设。 From Review
      【解决方案7】:

      let weekday = ['Sunday',
                     'Monday',
                     'Tuesday',
                     'Wednesday',
                     'Thursday',
                     'Friday',
                     'Saturday'][new Date().getDay()];
      
      console.log(weekday)

      【讨论】:

        【解决方案8】:

        第一个解决方案非常简单,因为我们只使用getDay() 来获取星期几,从0(星期日)到6(星期六)。

        var dayOfTheWeek = (day, month, year) => {
          const weekday = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
          return weekday[new Date(`${month}/${day}/${year}`).getDay()];
        };
        
        console.log(dayOfTheWeek(3, 11, 2020));

        第二种解决方案是toLocaleString()内置方法。

        var dayOfTheWeek = (day, month, year) => {
          return new Date(year, month - 1, day).toLocaleString("en-US", {
            weekday: "long",
          });
        };
        
        console.log(dayOfTheWeek(3, 11, 2020));

        第三种方案是基于Zeller's congruence

        function zeller(day, month, year) {
          const weekday = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
          if (month < 3) {
            month += 12;
            year--;
          }
          var h = (day + parseInt(((month + 1) * 26) / 10) +
            year + parseInt(year / 4) + 6 * parseInt(year / 100) +
            parseInt(year / 400) - 1) % 7;
          return weekday[h];
        }
        console.log(zeller(3, 11, 2020));

        【讨论】:

          【解决方案9】:

          只需使用库moment

          const moment = require('moment')
          console.log(moment(person.dateOfBirth,'DD.MM.YYYY').format("dddd {d}"))
          

          输出:

          Monday {1}
          

          【讨论】:

            【解决方案10】:

            如果需要,可以通过使用带有选项参数的Intl.DateTimeFormat 来获取一天的全名(例如“星期一”)。

            var Xmas95 = new Date('December 25, 1995 23:15:30');
            
            var options = { weekday: 'long'};
            console.log(new Intl.DateTimeFormat('en-US', options).format(Xmas95));
            // Monday
            console.log(new Intl.DateTimeFormat('de-DE', options).format(Xmas95));
            // Montag
            

            【讨论】:

              【解决方案11】:

              只是为了增加我的两分钱......时刻(这可能不是最好的库选项)有一个方法:

              moment.weekday(1) // Monday
              moment.weekdaysShort(1) //Mon
              

              顺便说一句,它依赖于语言环境,因此它会为您提供语言集中的名称,这就是我选择此选项的原因。

              【讨论】:

                【解决方案12】:

                如果有任何 Angular 用户,有一个管道可以实现这一点。

                {{yourDate | date:'EEEE'}}
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-02-18
                  • 2023-01-03
                  • 1970-01-01
                  相关资源
                  最近更新 更多