Вы должны сравнивать часы с различными диапазонами, используя реляционные операторы , такие как <
, >
, <=
или >=
.Например, если час меньше 6, период равен raat
.
Обратите внимание, что вам не обязательно делать два сравнения для каждого диапазона.Если час не меньше 6, вы знаете, что он больше или равен 7, поэтому используйте else
, чтобы уменьшить сложность каждого последующего if
.
Если я понимаю ваши требования, это выглядело бы примерно так:
function fmtPeriod(hour) {
if (hour < 6) {
return "Raat";
} else if (hour < 12) {
return "Sokal";
} else if (hour < 16) {
return "Dupur";
} else if (hour < 18) {
return "Bikal";
} else if (hour < 20) {
return "Sondha";
} else {
return "Raat"
}
}
Точное форматирование дат может быть довольно тесно связано с различными правилами, специфичными для локали, но, опять же, на основании того, что вы описали, вот примерна это:
function fmtPeriod(hour) {
if (hour < 6) {
return "Raat";
} else if (hour < 12) {
return "Sokal";
} else if (hour < 16) {
return "Dupur";
} else if (hour < 18) {
return "Bikal";
} else if (hour < 20) {
return "Sondha";
} else {
return "Raat"
}
}
function fmtHour(hour) {
return `0${hour % 12 || 12}`.substr(-2);
}
function fmtMinutes(minutes) {
return `0${minutes}`.substr(-2);
}
var input = document.getElementById("in");
var output = document.getElementById("out");
function formatOutput() {
const date = new Date("01 Jan 1970 " + input.value);
const hour = date.getHours();
const min = date.getMinutes();
output.innerText = `${fmtHour(hour)}:${fmtMinutes(min)} ${fmtPeriod(hour)}`
}
input.addEventListener('change', formatOutput);
input.value = `${new Date().getHours()}:${new Date().getMinutes()}`;
formatOutput();
#out { font-family: monospace }
<input id="in" type="time">
<span id="out"></span>
Конечно, большие умы, чем мой, затратили много времени на решение этой проблемы.Я бы порекомендовал вам взять лут по стандартному методу toLocaleTimeString
.Он может не точно соответствовать вашим требованиям, но обычно достаточно близко, чтобы удовлетворить большинство пользователей, и позаботится обо всех более сложных крайних случаях, которые трудно поймать одному разработчику:
const outputs = ['en-US', 'bn', 'bn-u-hc-h24'];
var input = document.getElementById("in");
function formatOutput() {
const date = new Date(`01 Jan 1970 ${input.value}`);
outputs.forEach(id => {
const output = document.getElementById(id);
output.innerText = date.toLocaleTimeString(id);
});
}
input.addEventListener('change', formatOutput);
input.value = `${new Date().getHours()}:${new Date().getMinutes()}`;
formatOutput();
span {
font-family: monospace;
}
span::after {
content: attr(id);
padding: 0 1em;
}
<input id="in" type="time"><br>
<span id="en-US"></span><br>
<span id="bn"></span><br>
<span id="bn-u-hc-h24"></span><br>
Если вам удобно управлять пакетами npm, вы также можете взглянуть на что-то вроде date-and-time
( попробуйте в RunKit ):
var date = require("date-and-time");
let now = new Date();
date.locale('bn');
date.format(now, 'HH:mm A');
// 16:33 দুপুর
Опять же, это может быть не точный желаемый результат,но это, вероятно, намного проще и менее подвержено ошибкам, чем попытка реализовать эквивалентную логику самостоятельно.