2013-09-30 53 views
26

我看起來有一個問題得到一個特定的日期前一個星期一。我正在嘗試使用Moment js來完成任務。很明顯,我可以手工完成,但發現它很好奇,我無法使用其網站上的moment.js文檔中的示例工作:http://momentjs.com/docs/#/get-set/day/瞬間js得到指定的一週給定的下一個日期

我嘗試類似:

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

這會導致「前兩天」迄今爲止,這是9月13日,而不是預期的9月9日。

有沒有人有線索?謝謝。

回答

54

這裏是它如何工作的:

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

+0

作爲最新的時刻,你可以使用這一天本身e.g時刻()的名稱。天(「星期一」) –

11

只有當您知道這一天是在本週還是在下週時,接受的答案纔有效。如果你不知道怎麼辦?在任意日期之後,你只需要下一個星期四?

首先,您想知道問題的日期是小於還是大於您想要的日期。如果它更大,你想在下週使用。如果它較小,則可以使用同一周的星期一或星期四。

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

1

我認爲這一點是如果使用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 
    } 
} 
相關問題