我正在尝试构建一个将军事时间转换为上午或下午时间的程序。
我预计 0 的输出是 12 am,但实际输出是 0 am。
const militaryHour = 0;
var hour = 0;
var amOrPm = "am";
if (militaryHour < 12) {
hour = militaryHour;
console.log(hour + " " + amOrPm);
} else if (militaryHour == 12) {
amOrPm = "pm";
hour = 12;
console.log(hour + " " + amOrPm);
} else if (militaryHour < 24) {
amOrPm = "pm";
hour = militaryHour - 12;
console.log(hour + " " + amOrPm);
} else if (militaryHour == 24){
hour = 12;
console.log(hour + " " + amOrPm);
} else {
hour = 12;
console.log(hour + " " + amOrPm);
}
您需要的所有代码
const militaryHour = 0,
hour = (militaryHour + 11) % 12 + 1,
amOrPm = militaryHour % 24 < 12 ? 'am' : 'pm';
不需要如果/否则需要
让我们按照你的逻辑
const militaryHour = 0;
if (militaryHour < 12)
好的,肯定会进入这个 if 语句,因为 0<12
hour = militaryHour;
console.log(hour + " " + amOrPm);
然后记录任何军事小时,即 0。这就是您的代码打印"0 am"的原因
上午 12 点实际上是一个边缘情况。您只需要再添加一个条件
if (militaryHour==0) {
hour = 12;
console.log(hour+" "+amOrPm)
}
在你的代码中,第一个分支if (militaryHour < 12) {...}
为真,所以我们有:
const militaryHour = 0;
var hour = 0;
var amOrPm = "am";
hour = militaryHour;
console.log(hour + " " + amOrPm);
很明显,我们将从中得到0。
这里有一个解决方案:以 24 小时制时间 mod 12 为例。如果我们以 0 结束,则使其成为 12。无论哪种方式,请附加 A.M./P.M.,具体取决于时间属于一天的哪半部分。所有这些都消除了容易出错的大型条件块。
const militaryToNormal = hour =>
(hour % 12 || 12) + (hour % 24 < 12 ? "am" : "pm")
;
for (let i = 0; i < 30; i++) {
console.log(i, "=>", militaryToNormal(i));
}
如果可以的话,更喜欢时刻.js。