【问题标题】:MomentJS change text when certain condition is metMomentJS 在满足特定条件时更改文本
【发布时间】:2020-05-22 07:52:25
【问题描述】:

目前我正在使用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 语句的问题是如果它是星期六上午 9 点。这个条件又是假的。我该如何解决这个问题?

【问题讨论】:

  • 能否请您说明如何声明cutoff
  • 抱歉,我编辑了问题
  • 您不能像那样对截止分钟执行 &&,因为下一小时分钟将再次重置为 0,但您仍然会晚于截止时间。编辑:哦,这基本上是你的问题。
  • 是的,我知道,但是我如何构建 if 语句,这样我的上述条件才成立?
  • @Rainierlaan 看到我的回答,也许这不是完整的解决方案,但它应该能让你到达那里。

标签: javascript jquery momentjs


【解决方案1】:

最好比较整个日期时间,而不是单独检查每个字段。

首先计算下一个截止时间,如果已经过了星期五,则将其设置为星期五。

let cutoff = moment().set({'hour': cutoffValues[0] - 1, 'minute': cutoffValues[1]})
if ( moment().day() > 5 ) { cutoff.set({'day': 5}) }

然后比较当前时间是否超过截止时间

if ( moment().isAfter(cutoff) {
  (...)
}

【讨论】:

    【解决方案2】:

    当您使用 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 方法来获取两者之间的日期和时间差异

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      • 2020-07-16
      • 1970-01-01
      相关资源
      最近更新 更多