3

我正在使用以下内容让用户在表单中输入日期:

<input name="name" type="date" id="id"/>

我想知道是否有一种方法可以从中解析日、月和年,并将它们设置为不同的变量。我试图只使用 Javascript,而不是 PHP。

3个变量将是整数。

谢谢。

4

4 回答 4

7

如果您接受输入并将其转换为date(按部分拆分或作为Date对象),则最好的选择是通过将输入值传递给它来简单地构造一个新Date对象:

var input = document.getElementById( 'id' ).value;
var d = new Date( input );

if ( !!d.valueOf() ) { // Valid date
    year = d.getFullYear();
    month = d.getMonth();
    day = d.getDate();
} else { /* Invalid date */ }

通过这种方式,您可以利用Dates 处理多种输入格式 - 它需要 YYYY/MM/DD、YYYY-MM-DD、MM/DD/YYYY,甚至是全文日期('October 25, 2013')等,而无需您编写自己的解析器。然后可以轻松检查有效日期!!d.valueOf()- 如果它是好的,则为 true,否则为 false :)

于 2013-10-25T19:35:38.603 回答
4

您将希望将值拆分为“-”,而不是“/”。例如,

$( "input" ).change(function(e) {
   var vals = e.target.value.split('-');
   var year = vals[0];
   var month = vals[1];
   var day = vals[2];
   console.info(day, month, year);
});

这是一个工作示例的 jsbin:http: //jsbin.com/ayAjufo/2/edit

于 2013-10-25T19:40:18.797 回答
1

你可以这样尝试:-

function parseDate(input) {
  var str= input.split('/');
  return new Date(str[0], str[1]-1, str[2]); 
}

str[1]-1因为月份从 0 开始。

您也可以检查Date.parse(string)但这取决于实现。

于 2013-10-25T18:53:18.353 回答
0

使用 ES9 改进正则表达式。你可以这样使用。

const  
reDate = /([0-9]{4})-([0-9]{2})-([0-9]{2})/,
match = reDate.exec('2019-05-29'),
year = match[1],  //2019
month = match[2], //05
day = match[3];   //29
于 2021-10-28T13:30:56.093 回答