上午12点被视为第二天

Sha*_*ane 3 javascript momentjs

12 AM 被认为是第二天

timeone = "5/18/2017 01:00 AM"
currenTime = "5/18/2017 05:55 AM"
timetwo = "5/18/2017  12:00 AM"
Run Code Online (Sandbox Code Playgroud)

我发现时间到了这个condition失败了12:00 AM,我该如何处理这个案子呢?

timeone.isBefore(currentTime) => passes
currentTime.isBefore(timetwo) => fails

if (timeone.isBefore(currentTime) && currentTime.isBefore(timetwo)) {

}
Run Code Online (Sandbox Code Playgroud)

更新:

var timeone = moment(time1, 'MM/DD/YYYY hh:mm a');
var timetwo = moment(time2, 'MM/DD/YYYY hh:mm a');
var currentTime = moment(currentTime, 'MM/DD/YYYY hh:mm a');
Run Code Online (Sandbox Code Playgroud)

IMS*_*SoP 7

"12:00 AM"和"12:00 PM"在技术上是模棱两可的,因为AM表示"中午之前",PM表示"中午之后".由于中午既不是在中午之前也不是中午之后,午夜可以被认为是一天的结束或下一天的开始,两个标签都不合适.

然而,这是一个非常普遍的解释,即12:00 AM表示午夜(00:00表示24小时表示法),12:00 PM表示中午(12点钟表示24小时表示法).维基百科有一个关于各种解释的部分.

这是您的图书馆使用的解释,所以"5/18/2017 12:00 AM"="5/18/2017 00:00",这显然是在"2017/5/18 05:55 AM"之前.

如果您的用户始终期望相反的解释,您可以预先处理输入以交换值.但是,验证失败可能更安全,并强迫他们进入"中午12点",甚至完全拒绝"12:00"并让他们进入"12:01 PM",这是(我认为)明确无误.


Jam*_*iec 2

currentTime = "5/18/2017 05:55 AM"
timetwo = "5/18/2017 12:00 AM"
currentTime.isBefore(timetwo) => 失败

当你说“失败”时,你的意思是返回 false - 这是预期的。凌晨 5:55 并不是午夜之前,因为午夜是一天的开始,而不是一天的结束。

  • @EngineerDollery 如果图书馆以其他方式实现它,我会感到非常惊讶,但这也许只是一种文化偏见。为此,他们必须将特殊情况“12:00AM”和“12:00:00AM”作为特殊情况,与“12:01AM”和“12:00:01AM”具有不同的逻辑 - 除非有预计“12:59AM”比“1:00PM”早一分钟的人? (4认同)
  • 我同意,它是模棱两可的 - 但不是在软件开发/库中 - 并且 100% 不是在 momentjs 中 (2认同)
  • 不,他没有弥补。英语中确实没有使用它的标准,但按照惯例,它是如何定义的。12:00 am 是午夜,12:00 pm 是中午,我认为只有 12:00 pm 没有定义,因为中午既不是 am 也不是 pm,而午夜可以两者都是。然而,上午绝对是一天的开始,而不是结束。 (2认同)