Необходимо преобразовать время из 24 – часового формата в 12-часовой формат Вот мой код, я использовал последнюю строку кода из интернета, что преобразует 24 часа в 12, но синтиксис (hour >= 12)? hour - 12: hour; мне не понятен, почему просто не использовать функцую с conditional statement if? И зачем нужен такой формат? Ребята помогите плиз !
var today = new Date();
var day = today.getDay();
var daylist = ["Sunday","Monday","Tuesday","Wednesday ","Thursday","Friday","Saturday"];
console.log("Today is : " + daylist[day] + ".");
var hour = today.getHours();
var minute = today.getMinutes();
var second = today.getSeconds();
var prepand = (hour >= 12)? " PM ":" AM ";
hour = (hour >= 12)? hour - 12: hour;
Это тернарный оператор. Для лучшего понимания почитайте тут: https://ru.wikipedia.org/wiki/Тернарная_условная_операция
Безотносительно к определённому языку программирования тернарную операцию можно определить так:
логическое выражение ? выражение 1 : выражение 2
Алгоритм работы операции следующий:
В Вашем случае:
hour = (hour >= 12)? hour - 12: hour;
заменить можно на:
if (hour >= 12)
hour = hour - 12;
else
hour = hour;
Как видите это требует большего кол-ва кода, требует больше времени на понимания происходящего. Для сокращения кода и используют тернарный оператор ?:
А не проще-ли использовать стандартный функционал вывода даты?
var date = new Date();
// Запрашиваем нужный формат вывода даты
var options = {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric' ,
hour: 'numeric',
hour12 : true, // время в AM-PM формате
minute : 'numeric'
};
console.log(date.toLocaleString('en-US', options));
hour = (hour >= 12)? hour - 12: hour;
Тернарный оператор имеет вид:
Условие ? РезультатЕслиИстинно : РезультатЕслиЛожно
Т.е. код выше, дословно обозначает:
if (hour >= 12) {
hour = hour - 12;
} else {
hour = hour;
}
Из-за бессмысленной ветки else
вариант if (hour >= 12) hour -= 12
может быть более предпочтительным.
Этот код выдаст вам время 0:15 am
для четверти первого ночи, в то время как должно быть 12:15 am
.
Предлагаю воспользоваться вот такой заменой:
hour= hour % 12 || 12;
Здесь мы берём остаток от деления на 12, но если он равен нулю результат равен 12.
Тернарный оператор не есть по сути заменой условному оператору if. Его использование оправдывается при встраивании небольшых условных веток прямо в выражения. Если вам нужно уже сделать условие вне выражения, лучше использовать if...else. То-есть в вашем случае код вида
if(hour >= 12){
hour = hour - 12;
}else{
hour = hour;
}
превращается в hour = (hour >= 12)? hour - 12: hour;
.
Можно использовать Date.prototype.toLocaleTimeString()
с локалем en-US.
Например, так: date.toLocaleTimeString('en-US')
, что даст время в формате, к примеру "1:00:00 PM"
Подробнее здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как можно в кастом директиве через innerHTML задать хтмл с другими директивами или интерполяцией:
Есть страница, на которой несколько видео с youtubaВидео выводятся с помощью foreach
Добрый день всем! Помогите решить проблему) Есть кусок кода