【问题标题】:How to find sunday 9 weeks ago irrespective of what day of the week today is using JavaScript如何找到 9 周前的星期日,而不管今天是一周中的哪一天使用 JavaScript
【发布时间】:2020-10-07 22:04:47
【问题描述】:

希望有人可以帮助我。我正在尝试编写一个函数来查找 9 周前的星期日,而不管今天在一周中的哪一天使用 javascript。
我尝试了 moment().day(-56) 但它不起作用。我们还有其他方法可以做到这一点吗?

【问题讨论】:

    标签: javascript react-dates


    【解决方案1】:

    如果你选择只使用原生 JS, 这可能适合您的需求。

    <script>
     var today = new Date();
     // today.getDay() is current day-of-week (0=Sun ... 6=Sat)
     var lastSun9wksAgo = new Date(today.getFullYear(), today.getMonth(), today.getDate()-(9*7+today.getDay()));
     // alter display for 9 weeks ago with day-of-week offset
     alert(lastSun9wksAgo.toDateString());
    </script>
    

    如果重复使用,可以放入一个两行函数,像这样:

        <script>
    function sundayPriorWeeks(weeks) {
      var today = new Date();
      // today.getDay() is current day-of-week (0=Sun ... 6=Sat)
      var lastSun9wksAgo = new Date(today.getFullYear(), today.getMonth(), today.getDate()-(9*7+today.getDay()));
      // alter display for # weeks ago with day-of-week offset
      return lastSun9wksAgo;
    }
    alert(sundayPriorWeeks(9).toDateString());
    </script>
    

    【讨论】:

      【解决方案2】:

      这就是你要找的吗?

      console.log(moment().startOf('week').subtract(9,'weeks').format("MM-DD-yyyy"))
      

      星期天是一周的开始,所以我们去那里寻找基线。然后,使用 Momentjs 减法函数从那里减去 9 周。格式化以方便输出。

      【讨论】:

        【解决方案3】:

        根据https://momentjscom.readthedocs.io/en/latest/moment/02-get-set/06-day/,您可以通过以下方式获得 9 个星期日前:

        moment().day(-63)
        

        【讨论】:

          【解决方案4】:

          我认为您需要分别计算星期和工作日。试试这样的:https://codepen.io/kevinashworth/pen/bGeGjGx

          var thisWeek = moment().week()
          var theSunday = moment().week(thisWeek - 9).weekday(0).format("dddd, MMMM Do, YYYY")
          

          【讨论】:

          【解决方案5】:

          我假设您需要找到 9 周前的第一个星期日,所以下面的函数可能会有所帮助。

          const findNineWeeksAgo = () => {
            let nineWeeksAgo = new Date('August 19, 1975 23:15:30')
            const nineWeeksInDays = 63
          
            // You can modify a date using setDate. It automatically corrects for shifting to new months/years etc.
            nineWeeksAgo.setDate(nineWeeksAgo.getDate() - nineWeeksInDays);
          
            return nineWeeksAgo
          }
          
          const findNextSunday = () => {
            const dateNineWeeksAgo = findNineWeeksAgo()
            // getting the exact day of the week that was 9 weeks ago
            let dayNineWeeksAgoe = dateNineWeeksAgo.getDay()
            // if the exact day is sunday i.e 0 return that date in string format else find number of days to sunday add them to the exact date and reurn that.
            if (dayNineWeeksAgoe === 0) return dayNineWeeksAgoe.toString()
            else {
              let daysLeftToSunday = 7 - dayNineWeeksAgoe
              dateNineWeeksAgo.setDate(dateNineWeeksAgo.getDate() + daysLeftToSunday);
              return dateNineWeeksAgo.toString()
            }
          }
          
          console.log(findNextSunday())

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-04
            • 1970-01-01
            • 2011-10-07
            • 2018-05-24
            • 1970-01-01
            相关资源
            最近更新 更多