簡體   English   中英

Moment js在給定指定工作日的情況下獲取下一個日期

[英]Moment js getting next date given specified week day

在給定特定日期的前一個星期一,我似乎有點問題。 我正在嘗試使用 Moment js 來完成任務。 顯然,我可以手動完成,但奇怪的是我無法使用他們網站上 moment.js 文檔中的示例讓它工作: http://momentjs.com/docs/#/get-set /天/

我正在嘗試類似的東西:

moment([2013, 08, 15, 15, 20]).day(-1).format('ddd, MMM DD')

這導致“兩天前”日期,即 9 月 13 日而不是預期的 9 月 9 日。

有人在這里有線索嗎? 謝謝。

這是它的工作原理:

moment().day(1) // this monday
moment().day(-6) // last monday, think of it as this monday - 7 days = 1 - 7 = -6

同樣適用於其他方向:

moment().day(8) // next monday, or this monday + 7 days = 1 + 7 = 8

你的代碼moment().day(-1)可以解釋為這個星期天 - 1 天 = 0 - 1 = -1 或這個星期六 - 7 天 = 6 - 7 = -1

接受的答案僅在您已經知道相關日期是在本周還是下周時才有效。 如果你不知道怎么辦? 您只需要某個任意日期之后的下一個可用星期四?

首先,您想知道所討論的一天比您想要的那一天小還是大。 如果它更大,你想在下周使用。 如果較小,則可以使用同一周的星期一或星期四。

const dayINeed = 4; // for Thursday
if (moment().isoWeekday() <= dayINeed) { 
  return moment().isoWeekday(dayINeed);
} else...

如果我們已經過了我們想要的那一天(例如,如果我們的時刻是星期五,而我們想要下一個可用的星期四),那么您需要一個解決方案,該解決方案將為您提供“我們時刻之后的一周中的星期四”,無論我們的時刻是哪一天,沒有任何必要的加法/減法。 簡而言之,您想先進入下一周,使用moment().add(1, 'weeks') 進入下一周后,您可以使用moment().day(1)選擇您想要的那一周中的任何一天。

總之,這將為您提供滿足您要求的下一個可用日期,無論您的初始時刻在一周中的哪個位置:

const dayINeed = 4; // for Thursday

// if we haven't yet passed the day of the week that I need:
if (moment().isoWeekday() <= dayINeed) { 
  // then just give me this week's instance of that day
  return moment().isoWeekday(dayINeed);
} else {
  // otherwise, give me next week's instance of that day
  return moment().add(1, 'weeks').isoWeekday(dayINeed);
}

另見: https : //stackoverflow.com/a/27305748/800457

我認為關鍵是使用day()isoWeekday()可以獲得當前周的日期,無論今天是一周中的哪一天。 因此,您得到的日期可能已經過去,也可能即將到來。

示例:

如果今天是星期三, moment().isoWeekday(5).format()將返回即將到來的星期五的日期。

moment().isoWeekday(1).format()將返回前一個星期一。

因此,當您說您想要“上周二”的日期時,該日期可能屬於當前周或前一周,具體取決於今天是哪一天。

獲取最后dayOfTheWeek的日期的可能函數是

function getDateOfPreviousDay(dayOfTheWeek) {
  currentDayOfTheWeek = moment().isoWeekday();   
  if ( currentDayOfTheWeek >= dayOfTheWeek ) {
    return moment().isoWeekday(dayOfTheWeek).format(); // a date in the current week
  }
  else {
    return moment().add(-1,'weeks').isoWeekday(dayOfTheWeek).format(); // a date in the previous week
  }
}
function nextWeekday (day, weekday) {
  const current = day.day()
  const days = (7 + weekday - current) % 7
  return day.clone().add(days, 'd')
}

// example: get next Friday starting from 7 Oct 2019

nextWeekday(moment('2019-10-07'), 5)) // 2019-10-11

 const upcomingDay = (dayIndex, format = "DD MMMM YYYY") => { if ( Number(moment().format("D")) >= Number(moment().day(dayIndex).format("D")) ) { return moment().day(7 + dayIndex).format(format); } return moment().day(dayIndex).format(format); };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM