Подтвердить что ты не робот

Разбор Javascript Times без даты

Мне нужно разобрать и манипулировать Times без дат в моем коде. Например, я могу получить строку "15:00" от таймера. Я хочу превратить это в какой-то объект времени - я обычно работаю в Python, который имеет различные объекты Date, Time и Datetime.

Однако все решения, которые я видел, сосредоточены на использовании объекта Date. Это не может анализировать строку типа "15:00", так как она требует дневной информации. Я не хочу добавлять произвольную информацию о дате в Times - особенно потому, что Date предлагает делать предположения о таких вещах, как переход на летнее время, в зависимости от дня и локали, и, как представляется, существует риск того, что он автоматически попытается перевести время в данный язык. Кроме того, я хочу иметь возможность добавлять время, например. "15:00 + 1 час"

Какое рекомендуемое решение для синтаксического анализа и обработки "необработанных" времен, не связанных с датами?

4b9b3361

Ответ 1

К сожалению, нет отличного решения. JavaScript имеет объект Date, который, вероятно, неверно назван, поскольку он действительно является датой + временем.

Одна вещь, о которой вы, возможно, захотите подумать глубже - вы говорите, что хотите работать только с временем, но вы имеете в виду время суток или вы имеете в виду длительность времени? Это две связанные, но несколько разные концепции.

Например, вы сказали, что вам нужна операция типа "15:00 + 1 час". Ну, это было бы явно 16:00 в любом случае. Но как насчет "15:00 + 10 часов"? Это будет 25:00, если вы говорите о продолжительности, но может быть 01:00, если вы говорите о времени дня.

Собственно, это может быть не 01:00, так как не все дни имеют в них 24 часа. Некоторые дни имеют 23, 23,5, 24,5 или 25 часов, в зависимости от того, какой часовой пояс и начинается ли DST или останавливается в этот день. Поэтому в контексте времени суток вы, вероятно, хотите включить определенную дату и зону в свои расчеты. Конечно, если вы говорите о прямых 24-часовых днях, то этот момент не имеет значения.

Если вы говорите о длительности - вы можете снова взглянуть на moment.js, но не на объект moment. Там есть еще один объект, moment.duration. Ссылка здесь.

И, наконец, вам может потребоваться просто использовать простой javascript для разбора часов и минут из строки времени в виде чисел. Манипулируйте номерами по мере необходимости, а затем снова выведите строку. Но ваш вопрос кажется, что вы ищете что-то более управляемое.

Ответ 2

Здесь решение moment.js в течение 12 или 24 часов:

moment('7:00 am', ['h:m a', 'H:m']); // Wed Dec 30 2015 07:00:00 GMT-0600 (CST)
moment('17:00', ['h:m a', 'H:m']);   // Wed Dec 30 2015 17:00:00 GMT-0600 (CST)
moment('17:00 am', ['h:m a', 'H:m']);// Wed Dec 30 2015 17:00:00 GMT-0600 (CST)
moment('17:00 pm', ['h:m a', 'H:m']);// Wed Dec 30 2015 17:00:00 GMT-0600 (CST)

http://momentjs.com/docs/#/parsing/string-formats/

Ответ 3

В итоге я использовал следующее, поскольку уже использовал moment в своем приложении:

var str = '15:16:33';
var d = new moment(str, 'HH:mm:ss');

Смотрите Moment String + Format docs для других строк формата, которые вы можете использовать.

Ответ 4

Мне нужно было сделать это недавно для проекта, но мне действительно не нужно включать moment.js, метод, который я использовал, - это вручную разобрать время, подобное этому:

function parseTime(time) {    
    let timeInt = parseInt(time);
    let minutes = time.substring(3,5);

    // you could then add or subtract time here as needed

    if(time > '12:00') {
         return `${timeInt - 12}:${minutes} PM`;
    } else {
         return `${timeInt}:${minutes} AM`;
    }
}

Используйте это как альтернативный стартер, если вы не хотите использовать момент. Обратите внимание, что в этом примере используется синтаксис es6.