Обнаружение, если пользователь ввел дату, время или дату и время

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

Datetime: DD-MMM-YY HH:mm:ss.SSS
Date:     DD-MMM-YY
Time:     HH:mm:ss

Я пытаюсь определить, кто из указанных выше 3 пользователей вошел, например:

var timeInput = $scope.userDatetime;
var timeOnly = moment(timeInput, "HH:mm:ss").isValid();

Выше может сказать мне, если пользователь ввел только время, но могу ли я определить, ввели ли они только дату или дату и время?

Кроме того, глядя на документацию на данный момент, я вижу, что вышеизложенное можно изменить так:

var timeOnly = moment(timeInput, "HH:mm:ss", true).isValid();

1 ответ

Поскольку ваши входные данные могут иметь разные форматы, вы можете использовать моментный анализ с несколькими форматами. Как сказано в документации:

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

Это то же самое, что String + Format, только он будет пытаться сопоставить ввод с несколькими форматами.

Момент использует некоторые простые эвристики, чтобы определить, какой формат использовать. С целью:

  • Предпочитайте форматы, приводящие к действительным датам по сравнению с неверными
  • Предпочитают форматы, которые анализируют больше строки, чем меньше, и используют больше формата, чем меньше, то есть предпочитают более строгий анализ.
  • Предпочитаю форматировать раньше в массиве, чем позже

Кроме того, вы можете использовать creationData()чтобы получить используемый формат.

Вот простой пример использования:

function getFormatInserted(value){
  var mom = moment(value, ["HH:mm:ss", 'DD-MMM-YY HH:mm:ss.SSS', 'DD-MMM-YY'], true);
  if( mom.isValid() ){
    return mom.creationData().format;
  }
  return '';
}

$('#btn').click(function(){
  var value = $('#date').val();
  var format = getFormatInserted(value);
  $('#result').html(format);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

<input type="text" id="date">
<button type="button" id="btn">Get format</button>
<span id="result"></span>

Другие вопросы по тегам