当前,我正在使用momentJS,并且我想在某个条件为真时更改元素的文本。
要在MomentJS中度过一天,您只需moment().day()
,就可以持续数小时和数分钟。日期从1(星期一)到7(星期日)。
我有一个所谓的“截止”时间来订购商品。例如“晚上8点之前订购,第二天发货”,那么在这种情况下,截止时间为晚上8点。
我想要的条件是,当它是第5天(星期五)并且已超过截止时间(晚上8点)。它需要显示文本“星期一晚上之前的订单,星期四交付”。但是例如说今天是星期六上午9点,它仍然需要显示该消息。仅当它在星期一晚上8点过后才应该再次显示默认消息。
我编写的代码如下:
if(moment().day() > 5 && moment().hour() > cutoff.hour() && moment().minute() > cutoff.minute()) {
tempCutOff = moment().set({'day': 1, 'hour': cutoffValues[0] - 1, 'minute': cutoffValues[1] - 1});
tempTimeLeft = moment(tempCutOff.diff(moment()))
$('.timerText').html("Order before " + tempCutOff.format('dddd') + "evening");
if(tempTimeLeft.days() > 0) {
str = tempTimeLeft.days() + " days " + tempTimeLeft.hours() + " hours and " + timeLeft.minutes() + " minutes";
} else {
str = timeLeft.hours() + " hours and " + timeLeft.minutes() + " minutes";
}
$("#orderCountdownTimer").html(str);
tempCutOff.add(1, 'days')
$('.timerTextExtra').html("delivered on " + tempCutOff.format('dddd'));
}
编辑:: 声明
let cutoffValues = $('.cutoff_value').val().split(":");
let str = "";
let cutoff = moment().set({'day': moment().day(), 'hour': cutoffValues[0] - 1, 'minute': cutoffValues[1]})
let timeLeft = moment(cutoff.diff(moment()));
let tempCutOff;
let tempTimeLeft;
此if语句的问题在于,如果它是Satuday 9am。此条件再次为假。我该如何解决这个问题?
答案 0 :(得分:0)
最好比较整个日期时间,而不要单独检查每个字段。
首先计算下一个截止时间,如果已超过星期五,则将其设置为星期五。
let cutoff = moment().set({'hour': cutoffValues[0] - 1, 'minute': cutoffValues[1]})
if ( moment().day() > 5 ) { cutoff.set({'day': 5}) }
然后比较当前时间是否超过了截止时间
if ( moment().isAfter(cutoff) {
(...)
}
答案 1 :(得分:0)
在使用moment.js时,您只需检查日期是否在其他两个日期之间,因此假设您创建了一个cutOffStart
(星期五,晚上8点)和一个cutOffEnd
(星期一,晚上8点)。
这应该可以解决问题:
const current = moment();
const cutoffStart = moment();
cutoffStart.day('Friday').hour('8');
const cutoffEnd = moment();
cutoffEnd.day('Monday').hour('8');
if(current.isBetween(cutoffStart, cutoffEnd)){
// display your text
}
您仍然可以使用moment.js .diff
方法来获取两者之间的日期和时间差异