Обнаружение, если пользователь ввел дату, время или дату и время
У меня есть поле ввода, в котором пользователи могут ввести следующее:
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>