2016-10-10 318 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