DevGang
Авторизоваться

Алгоритмы JavaScript: преобразование времени 

Для сегодняшнего алгоритма мы собираемся создать функцию с именем timeConversion. Эта функция на вход будет принимать строку. В этой функции вам дается время, записанное в 12-часовом формате:

7:05:45 PM

И вам придется выводить время в новом формате.

19:05:45

Первое, что мы собираемся сделать, это получить первые два числа строки. Это единственное, что имеет значение при преобразовании времени в формате AM / PM.

let hour = s.substring (0, 2) * 1; 
let timeFormat = s.substring (2,8);

Мы используем метод substring класса String для извлечения символов от позиции 0 (первая буква) до позиции 2 (третий символ), но не включая ее.

Есть несколько способов преобразовать строку в число, но если мы умножим строку на простое число, она будет преобразована. Наша строка уже является числом, и мы захотим умножить ее на единицу, потому что нам нужно только число в формате строки. Мы здесь не занимаемся математикой. Мы добавим результат в переменную с именем hour.

Мы также создадим переменную timeFormat, которая будет принимать все значения от первого двоеточия до последнего числа перед PM / AM:

07:05:45PM // before substring(2,8)
:05:45 // after substring(2,8)

Мы удаляем AM / PM, потому что при записи времени в 24-часовом формате это бесполезно. Нам нужен только маленький кусочек строки, так как он останется неизменным.

Есть некоторые вещи, которые следует учитывать при конвертации из 12-часового формата в 24-часовой. Один из них - 12 AM и 12 PM.

В 24-часовом формате 12:00 - это… 12:00, но в 12 часовом формате 12:00 AM это 0:00, поэтому мы пишем следующие операторы:

// if midnight
if (hour === 12 && s.indexOf("AM") !== -1) {
    return ("00" + timeFormat);
}
// if afternoon
if (hour === 12 && s.indexOf("PM") !== -1) {
    return (time + timeFormat);
}

Если переменная hour равна 12, мы также должны вернуться к нашей исходной строке и посмотреть, содержит ли она PM или AM, используя indexOf. IndexOf вернет число, положение символа, в котором строка была найдена впервые. Если ничего не найдено, он вернет -1.

В нашем первом блоке if, если значение - полночь, мы должны проверить, является ли оно 12:00 и содержит ли строка значение AM. Если это произойдет, мы добавим «00» к нашей оставшейся строке из переменной timeFormat . Если значение равно полудню, мы просто объединим переменную часа с нашей переменной timeFormat .

Следующее, что мы рассмотрим, это время между полуночью и полуднем и между полуднем и полуночью:

// если время от 1 до 11 вечера, прибавьте 12 к времени 
if (hour < 12 && s.indexOf("PM") !== -1) {
    return (12 + hour + timeFormat);

} else {

 	// если час от 1 до 11 утра
    if (hour < 10) { 
    	// если число меньше 10, добавить ноль в начало
        return ("0" + hour + timeFormat);

    } else { 
    	// если число больше 9, просто добавьте остаток строки
        return (hour + timeFormat);

    }
}

В нашем блоке if мы рассмотрим время PM. Если число меньше 12, но это время PM, мы просто добавляем 12 к часу.

В нашем операторе else мы рассмотрим время AM, которое меньше 12. Мы включили вложенный оператор if, потому что есть несколько вещей, которые нужно проверить для времени AM.

В нашем первом блоке if, если время меньше 10, мы должны добавить ноль перед этим числом.

Но для всех значений, которые больше 9, просто выведите время.

Убедитесь, что вы связали переменную hour со строкой из переменной timeFormat.

И это все для нашей функции timeConversion. Если вы по какой-то причине окажетесь в месте, где используется военное время, вы можете запустить этот код, хотя математика в вашей голове будет гораздо быстрее.

#JavaScript
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

Напиши статью и выиграй годовую подписку на Яндекс плюс или лицензию от Jet Brains

Участвовать