2016-10-10 317 views
0

我試圖獲得最近的星期五(上午12:00或上午00:00)的開始。這已工作:Momentjs - 獲取最近的星期五

moment().isoWeekday(5).startOf('day').toDate()

但它只能星期五 - >週日,週一早晨它就會是指即將到來的週五,在這種情況下,這會工作:

moment().add('-1', 'week').day(5).startOf('day').toDate()

但我需要它是動態的,如果可能的話,在一行中完成,我不會在當天執行任何檢查。

有沒有辦法總是得到最近的星期五無論今天是什麼。

編輯我也試圖得到這個返回當天(星期五),如果星期五執行。

+0

始終減去5天呢? (),加上(' - 5','days')。day(5).startOf('day')。toDate()' –

+0

Thanks @DanielDiekmeier。如果在星期五執行,會得到當天嗎?必要的我想把星期五當作本週的開始。 – elzi

+0

@DanielDiekmeier通過我自己的測試,它看起來像會。由於星期五的-5將得到星期天,並在同一周內工作。完善。 – elzi

回答

3

如果你不想使用一個庫,它是相當直截了當

var date = new Date(); 
 
while (date.getDay() !== 5) date.setDate(date.getDate() -1); 
 

 
console.log(date)

隨着一刻

var date = moment(); 

var friday = date.day(date.day() >= 5 ? 5 :-2); 

,如果誤差在毫秒級不要緊,你可以撥打電話moment()兩次,使其成爲一條線(但我會更加激烈使用一個變量)

var friday = moment().day(moment().day() >= 5 ? 5 :-2); 
+0

我一直在使用'.isoWeekday',我可以通過'.day'。在這種情況下做什麼'-2'? – elzi

+0

這就是說,如果當天是> = 5(星期五),那麼得到這個日期,其他的明智的日子減去2?所以星期天的作品,星期六呢? (如果我的理解正確的話) – elzi

+0

'5'是星期五的數字,如果它已經超過了'5',即那周的星期五之後,返回'5',否則返回'-2'。用'day()',做'day(0)'總是星期一,所以'day(-2)'總是星期五。 – adeneo

0

檢查:

var date = moment().utc().isoWeekday(5); 
 
if(moment().day() < 5) { 
 
    date = date.add(-1, 'week'); 
 
} 
 

 
console.log('Recent friday starts:', date.startOf('day').toDate()); 
 

 
console.log('Recent friday ends:', date.endOf('day').toDate());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.1/moment.js"></script>

+0

如果星期五在星期五執行,那麼「最近的星期五」會得到當前星期五嗎? – elzi

+0

因爲-1周,所以即使你在星期五叫它 – num8er

+0

是的,所以它會給過去的星期五對不起,如果我不清楚,我需要它返回當前的一天,如果在星期五運行,而不是上週的前一天。這就是爲什麼我試圖使用語言「最近」的星期五。 – elzi