gpt4 book ai didi

javascript - Moment.js isBefore() 在检查中午 12 点/中午之前是否工作时不起作用

转载 作者:行者123 更新时间:2023-11-30 20:14:05 28 4
gpt4 key购买 nike

我正在使用 Moment.js 在前端处理一些日期标签。我遇到了一个晦涩的场景,希望 MomentJS 专家对我进行类(class)纠正。

考虑以下传入字符串值的实现,"2018-08-28T20:21:56"

请注意,上述日期字符串和添加分钟 600 是从后端动态提供的。

let dateTitle;

// Before setting date label, compare enddate with endoffset against 12pm
let endCutOff = moment("2018-08-28T20:21:56").add(600, 'm');
let isBeforeNoon = moment(endCutOff).isBefore(moment({ hour: 12, minute: 0 }));

if ( isBeforeNoon ) {
// Credit previous day if user ended before noon.
dateTitle = moment("2018-08-28T20:21:56")
.add(600, 'm')
.local()
.subtract(1, 'd')
.format('MMMM D, YYYY');
} else {
// Credit that very day if after 12pm.
dateTitle = moment("2018-08-28T20:21:56")
.add(600, 'm')
.local()
.format('MMMM D, YYYY');
}

此输出正确为 “2018 年 8 月 28 日”

但是,使用传入的字符串值再次执行相同的操作,"2018-08-29T20:43:58",您会看到输出为 "August 30, 2018”

应该是“2018年8月29日”

我很清楚 isBeforeNoon 第一轮为真,下一轮为假。但是,我需要您的专业知识来解释为什么以及如何解决它。我怀疑这与传递的日期字符串格式有关,但到目前为止这只是一个概念。

感谢您的帮助。

最佳答案

如果我理解正确的话,问题是moment({ hour: 12, minute: 0 })的日期组件默认为“今天的日历日期”。

默认情况下,.isBefore() 会考虑被比较时刻实例的时间和日期

因此这意味着 isBeforeNoonendCutOff 和当前日历日期(显然总是在变化)决定。

也许您可以执行以下操作:

let endCutOff = moment("2018-08-28T20:21:56").add(600, 'm');

// Create a copy of endCutOff to aquire the date from endCutOff, and set
// hour/minute accordingly
let momentForIsBefore = endCutOff.clone().hour(12).minute(0).second(0);
let isBeforeNoon = moment(endCutOff).isBefore(momentForIsBefore);

if ( isBeforeNoon ) {
// Credit previous day if user ended before noon.
dateTitle = moment("2018-08-28T20:21:56")
.add(600, 'm')
.local()
.subtract(1, 'd')
.format('MMMM D, YYYY');
} else {
// Credit that very day if after 12pm.
dateTitle = moment("2018-08-28T20:21:56")
.add(600, 'm')
.local()
.format('MMMM D, YYYY');
}

希望这对您有所帮助!

关于javascript - Moment.js isBefore() 在检查中午 12 点/中午之前是否工作时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52087810/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com