0
<script>
function myFunction(){
//Example I passed in 31-02-2013
//var timeDate = document.getElementById('date').text; <--This Wont Work!
//This is some very basic example only. Badly formatted user entry will cause all 
//sorts of problems.
var timeDate = document.getElementById('date').value;

//Get First 2 Characters 
var first2 = timeDate.substring(0,2);
console.log(first2);

var dateArray = timeDate.split("-");
console.log(dateArray[0]);

var date = parseInt(dateArray[0], 10) ;//Make sure you use the radix otherwise leading 0 will hurt
console.log(date);
if( date < 1 || date > 30 )
    alert( "Invalid date" );

var month2 = timeDate.substring(3,5);
console.log( month2 );

var monthArray = timeDate.split( "-" );
console.log( monthArray[1] );

var month = parseInt( monthArray[1],10 );
console.log( month );

if( month < 1 || month > 12 )
    alert( "Invalid month" );
}
</script>

私の関数は機能しています。ユーザー入力 -23-11-2013 // <--最初のアルファベットが「-」であるため、これは機能しません

私のテキスト入力は、2013 年 11 月 23 日 // <---動作する日付のみを受け入れます。

しかし、私の関数では、-23-11-2013 のような日付を挿入すると、無効な月が表示されます。関数に変更を加えるにはどうすればよいですか

4

4 に答える 4

0

これを試して...

var date = "-23-11-2013";

data = date.split("-");

場合 (データの長さ == 3){

if(数値(データ[0])>31){

alert("無効な日付形式");

}else if(Number(データ[1])>12){

alert("無効な月の形式");

} }そうしないと{

alert("不正な形式");

}

于 2013-05-13T09:42:53.173 に答える
0

使用できるより優れた関数を次に示します。

function myFunction(date) {
  var args = date.split(/[^0-9]+/),
      i, l = args.length;

  // Prepare args
  for(i=0;i<l;i++) {
    if(!args[i]) {
      args.splice(i--,1);
      l--;
    } else {
      args[i] = parseInt(args[i], 10);
    }
  }

  // Check month
  if(args[1] < 1 || args[1] > 12) {
    throw new Error('Invalid month');
  }
  // Check day (passing day 0 to Date constructor returns last day of previous month)
  if(args[0] > new Date(args[2], args[1], 0).getDate()) {
    throw new Error('Invalid date');
  }

  return new Date(args[2], args[1]-1, args[0]); 
}

Dateコンストラクターの月がベースであり、実際の値0から減算する必要があることに注意してください。1それに加えて、月によって日数が異なるため、日チェックが間違っています。提供された関数では、スペースや特殊文字などの値を渡すこともできます-23 - 11/2013。重要なのは、数字の順序 (日、月、年) だけです。

ここで、動作していることがわかりますhttp://jsbin.com/umacal/3/edit

于 2013-05-13T10:00:42.570 に答える
0

彼は、おそらく使用できるより優れた関数です。

function myFunc(s) {

   s = s.split("-").filter(Number); 

   return new Date(s[2], s[1], s[0]);
}

Invalid DateまたはDate オブジェクトを返す必要があります。

したがって、Date オブジェクトを返すように呼び出しmyFunc("23-11-2013")たり、返す必要があります。myFunc("-23-11-2013")

Mon Dec 23 2013 00:00:00 GMT+0530 (India Standard Time)
于 2013-05-13T09:51:03.880 に答える
0

ここでJavaScriptの部分文字列関数を確認してください

私の例:結果はest

var a ="test";
console.log(a.substring(1));
于 2013-05-13T09:30:33.607 に答える