检测用户是否输入了日期,时间或日期时间

时间:2017-02-03 12:22:59

标签: javascript momentjs datetime-format

我有一个输入字段,用户可以在其中输入以下内容:

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

以上可以告诉我用户是否只输入了一个时间,但我可以确定他们是仅输入了日期还是日期和时间?

另外,看一下docs的时刻,我可以看到上面的内容可以修改为:

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

1 个答案:

答案 0 :(得分: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>