【问题标题】:if else not working correctly if both dates are the same day如果两个日期都在同一天,否则无法正常工作
【发布时间】:2022-01-22 19:26:07
【问题描述】:

如果截止日期是今天或将来,我想显示截止日期,如果日期已过,则显示“关闭”字样。

我有以下代码,当截止日期和今天的日期相同时,它可以正常工作。

HTML

<div class="deadline-inner">
              <p
                v-if="Date.now() > new Date(deadline)"
                class="showclosedtitle"
              >
                <i class="fa fa-calendar-check-o" aria-hidden="true"></i>Closed
              </p>
              <p v-else>
                <i class="fa fa-calendar-check-o" aria-hidden="true"></i>
                <strong>Deadline: </strong>{{ deadline }}
              </p>
            </div>

截止日期采用以下格式:“2021 年 12 月 21 日”

我也试过了:

 v-if="Date.now() >= new Date(deadline)"
 v-if="Date.now() > +1 new Date(deadline)"

但如果截止日期和今天的日期相同,它们都会显示声明的“else”部分。任何帮助表示赞赏。

【问题讨论】:

    标签: vue.js


    【解决方案1】:

    尝试使用“一天结束”时间

    在浏览器控制台中输入您的日期(在撰写本文时):

    > new Date('21 December 2021');
    Tue Dec 21 2021 00:00:00
    
    > new Date();
    Tue Dec 21 2021 12:19:09
    

    所以new Date() 始终是“现在”,精确到秒(真的是毫秒)。
    您的比较日期始终从“00:00:00”开始。
    所以如果你想知道new Date()是否晚于deadline,添加23:59:59作为时间:

    new Date() > new Date('21 December 2021 23:59:59');
    

    这在明天之前都是错误的。

    所以在你的情况下,你可以在deadline 自己解决它或手动添加时间:

    v-if="Date.now() > new Date(deadline + ' 23:59:59')"
    

    【讨论】:

    • 非常感谢!现在看起来很明显。
    • 不客气??
    【解决方案2】:

    @user13928344 您的 deadline 不够具体。没有小时/分钟/秒/毫秒,因此它默认为日期存在的第一个时刻,即午夜或 00:00:00:000。因此,您的 new Date() 将始终大于截止日期并返回 true (除非您的逻辑在午夜和所有零点运行的可能性很小,在这种情况下,它将等于您的截止日期并且不大于,所以会返回假)。 你从哪里得到你的截止日期数据?您是否自己将其转换为当前格式并从后端获取?如果是这样,请将其转换为更具体的日期/时间。 否则,如果它来自用户输入,即表单,请将您的日期转换为毫秒,然后添加 86340000,这将使您的截止日期直到那天结束

    【讨论】:

    • 日、月和年来自我的 CMS 中日期选择器中用户生成的数据。我可以在每个日期的末尾添加时间戳,虽然是 11:59:59,所以这应该适用于我的场景。感谢您的 v. 有用的解释。
    • 完全没问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 2019-09-06
    • 2022-01-14
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多