【问题标题】:how to determine if date is weekend in javascript [closed]如何在javascript中确定日期是否是周末[关闭]
【发布时间】:2010-08-23 21:20:57
【问题描述】:

如果我有一个日期进入函数,我如何判断它是否是周末?

【问题讨论】:

标签: javascript date


【解决方案1】:
var dayOfWeek = yourDateObject.getDay();
var isWeekend = (dayOfWeek === 6) || (dayOfWeek  === 0); // 6 = Saturday, 0 = Sunday

【讨论】:

  • d != day :) 我宁愿称它为dayOfWeek,对 OP 来说更有意义。
  • 并非适用于所有时区。例如,在法国,一周的第一天是星期一,而不是星期日。 Moment 等现代图书馆弥补了这一点。
  • @csvan: getDay 应该始终返回 0 表示周日,6 表示周六等,根据当前的时区设置。 (然后由 OP 根据他们的要求决定什么构成“周末”。)
  • 对于 js,在比较绝对值时使用=== 而不是== 可能会更好。不是关键,只是最佳实践。
  • 有些国家的周末是周五和周六,所以这个答案适合 Christian Stackoverflow :-p
【解决方案2】:
var isWeekend = yourDateObject.getDay()%6==0;

【讨论】:

  • 这表示如果是星期六则返回 true
  • 0%6(星期日)和 6%6(星期六)的模数均为 0
  • 除了自愿混淆之外,我认为这种技术没有任何意义。我个人更喜欢 LukeH 的回答。在这种情况下,我们可以使用 6 而不是 7 的模来解决我们的问题,这只是偶然。
  • 有些国家把周五和周六定为周末
  • @Guy 那么问题是.getDay() 是否会产生另一个值,或者isWeekend 的定义是否错误。如果它关于变量,我不在乎。我想 0 永远是星期天,所以对我来说没问题。
【解决方案3】:

又短又甜。

var isWeekend = ([0,6].indexOf(new Date().getDay()) != -1);

【讨论】:

    【解决方案4】:

    我尝试了正确答案,它适用于某些语言环境,但不适用于所有语言环境:

    在 momentjs 文档中:weekday 返回的数字取决于区域设置 initialWeekDay,因此 Monday = 0 |星期日 = 6

    所以我改变逻辑来检查实际的 DayString('Sunday')

    const weekday = momentObject.format('dddd'); // Monday ... Sunday
    const isWeekend = weekday === 'Sunday' || weekday === 'Saturday';
    

    这样你就可以独立于语言环境了。

    【讨论】:

    • 有些国家把周五和周六定为周末
    • @Guy 您需要调整代码以满足国家/地区的需求。根据您在其他一些国家/地区上方链接的 wiki,周末只有一天。 Some countries have adopted a one-day weekend, i.e. either Sunday only (in seven countries), Friday only (in Djibouti, Iran, Palestine and Somalia), or Saturday only (in Nepal).
    【解决方案5】:

    2020 年更新

    现在有多种方法可以实现这一点。

    1) 使用day方法获取0-6的天数:

    const day = yourDateObject.day();
    // or const day = yourDateObject.get('day');
    const isWeekend = (day === 6 || day === 0);    // 6 = Saturday, 0 = Sunday
    

    2) 使用isoWeekday 方法获取1-7 的天数:

    const day = yourDateObject.isoWeekday();
    // or const day = yourDateObject.get('isoWeekday');
    const isWeekend = (day === 6 || day === 7);    // 6 = Saturday, 7 = Sunday
    

    【讨论】:

    • .isoWeekday() 是 moment.js 方法,但未指定。
    【解决方案6】:
    var d = new Date();
    var n = d.getDay();
     if( n == 6 )
    console.log("Its weekend!!");
    else
    console.log("Its not weekend");
    

    【讨论】:

      【解决方案7】:

      我已经在这里测试了大多数答案,但时区、语言环境或一周的开始时间是星期日还是星期一总是存在一些问题。

      下面是我认为更安全的一个,因为它依赖于工作日的名称en语言环境。

      let startDate = start.clone(),
          endDate = end.clone();
      
      let days = 0;
      do {
          const weekday = startDate.locale('en').format('dddd'); // Monday ... Sunday
          if (weekday !== 'Sunday' && weekday !== 'Saturday') days++;
      } while (startDate.add(1, 'days').diff(endDate) <= 0);
      
      return days;
      

      【讨论】:

        【解决方案8】:

        在当前版本中,你应该使用

            var day = yourDateObject.day();
            var isWeekend = (day === 6) || (day === 0);    // 6 = Saturday, 0 = Sunday
        

        【讨论】:

          【解决方案9】:

          在 Date 对象上使用 .getDay() 方法来获取日期。

          检查是 6(星期六)还是 0(星期日)

          var givenDate = new Date('2020-07-11');
          var day = givenDate.getDay();
          var isWeekend = (day === 6) || (day === 0) ? 'It's weekend': 'It's working day';
              
          console.log(isWeekend);
          

          【讨论】:

            【解决方案10】:

            以下输出一个布尔值,日期对象是否在 «opening» 小时内,不包括周末,不包括 23H009H00 之间的夜间时间,同时考虑到客户端时区偏移。

            当然这不处理像假期这样的特殊情况,但不远;)

            let t = new Date(Date.now()) // Example Date object
            let zoneshift = t.getTimezoneOffset() / 60
            let isopen = ([0,6].indexOf(t.getUTCDay()) === -1) && (23 + zoneshift  < t.getUTCHours() === t.getUTCHours() < 9 + zoneshift)
            
            // Are we open?
            console.log(isopen)
            <b>We are open all days between 9am and 11pm.<br>
            Closing the weekend.</b><br><hr>
            
            Are we open now?

            或者,要将星期几作为语言环境人类字符串,我们可以使用:

            let t = new Date(Date.now()) // Example Date object
            
            console.log(
              new Intl.DateTimeFormat('en-US', { weekday: 'long'}).format(t) ,
              new Intl.DateTimeFormat('fr-FR', { weekday: 'long'}).format(t) ,
              new Intl.DateTimeFormat('ru-RU', { weekday: 'long'}).format(t)
            )

            注意new Intl.DateTimeFormat 在循环内部很慢,一个简单的关联数组运行得更快:

            console.log(
              ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][new Date(Date.now()).getDay()]
            )

            【讨论】:

              【解决方案11】:

              在模前加1

              var isWeekend = (yourDateObject.getDay() + 1) % 7 == 0;
              

              【讨论】:

              • 这仅在您将星期日视为整个周末时才有效。
              • @cpburnz 大多数国家都这样做。只有少数几个星期天开始。
              • @bokkie 那么这是应该添加到您的答案中的重要信息。
              猜你喜欢
              • 2011-03-27
              • 2014-12-14
              • 2023-03-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-19
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多