2017-02-03 4 views
1

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

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(); 
+0

если это должен быть один из тех 3, просто проверить длину ввода. – andi

ответ

0

Поскольку ваш вход может иметь различные форматы, вы можете использовать moment parsing with multiple formats. Как указано в документах:

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

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

Moment использует некоторые простые эвристики, чтобы определить, какой формат использовать. В порядке:

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

Более того, вы можете использовать, чтобы получить 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>

Смежные вопросы