Разбор ТОЛЬКО временной строки с DateJS - PullRequest
9 голосов
/ 25 октября 2010

Я использую превосходную (но большую) библиотеку DateJS для обработки даты и времени в моем веб-приложении. Я только что натолкнулся на что-то, с чем я не уверен, как справиться.

Я хочу, чтобы мои пользователи могли вводить только строки времени без даты, но они должны иметь возможность вводить их любым удобным для них способом. Например:

  • 5: 00 вечера
  • 17: 00
  • 5: 00 pm
  • 5: 00p
  • и т.д.

Использование Date.parse(value) преобразует эти строки в полную дату, а это именно то, что я хочу. Однако он также позволяет пользователю вводить любую другую часть строки даты, например:

  • Сб 5 вечера
  • 1/1/2010 5 вечера
  • и т.д.

Я пытаюсь использовать DateJS для проверки поля ввода для значения времени. Что-то вроде:

function validateTime(value) {
    return Date.parse(value) !== null;
}

Есть ли способ использовать функции DateJS для решения этой проблемы? Существуют и другие SO вопросов , которые предоставляют решения, но если у DateJS есть способ сделать это, я действительно не хочу добавлять больше пользовательского кода в свое приложение для этого.

Ответы [ 2 ]

9 голосов
/ 25 октября 2010

Вскоре после того, как задал мой вопрос, я обнаружил, что Date.parseExact () может принимать массив строк формата.Как-то мне это не хватало.Мне удалось получить что-то, работающее со следующим кодом:

function validateTime(input) {
    return Date.parseExact(input, [
            "H:m",
            "h:mt",
            "h:m t",
            "ht","h t"]) != null ||
        Date.parseExact(input, [
            "h:mtt",
            "h:m tt",
            "htt","h tt"]) != null;
};

Обратите внимание, что некоторые форматы не могут быть включены одновременно, поэтому я разделил их на два отдельных parseExact() звонки.В этом случае я не смог бы включить ни одну строку, содержащую один t, с форматными строками, в которых содержался двойной tt.

5 голосов
/ 07 мая 2013

Аддитивный подход кажется громоздким. Убирает красоту DateJS на мой взгляд. Мне нужно было то же решение, и я решил просто незаметно добавить дату перед моей входной строкой перед анализом с DateJS:

var parsed = Date.parse(Date.today().toString('M/d/yyyy') + ' ' + this.value);

if (parsed) {
  alert(parsed.toString('h:mm tt'));
}

Теперь DateJS не будет обнюхивать ни один из своих шаблонов синтаксического анализа части даты, поскольку вы уже добавили его в.

Надеюсь, это кому-нибудь поможет!

...