1. ホーム
  2. javascript

JavaScriptでユーザー入力の時刻をDateオブジェクトにパースする方法は?

2023-11-22 13:31:23

質問

私は、ユーザーがテキスト入力に時刻を入力するためのフォーム ウィジェットに取り組んでいます (カレンダー アプリケーション用)。JavaScript (私たちは jQuery を使用しています) を使用して、ユーザーが入力したテキストを解析する最良の方法を見つけたいのですが、JavaScript の Date() オブジェクトにパースして、比較やその他のことを簡単に実行できるようにする最適な方法を見つけたいのです。

を試してみましたが parse() メソッドを試してみましたが、私のニーズには少しうるさ過ぎました。私は、以下の例の入力時間(論理的に類似した他の時間形式に加えて)を、同じようにうまくパースできることを期待します。 Date() オブジェクトとして正常にパースできることを期待します。

  • 午後 1 時
  • 午後 1 時
  • 1:00 p
  • 午後1:00
  • 午後 1 時
  • 1:00p
  • 午後 1 時
  • 午後1時
  • 1 p
  • 午後1時
  • 午後1時
  • 1p
  • 13:00
  • 13

私は、正規表現を使って入力を分割し、使いたい情報を抽出して、自分の Date() オブジェクトを作成するために使用したい情報を抽出しようと考えています。これを行うための最良の方法は何でしょうか?

どのように解決するのですか?

指定した入力に対して動作する簡単な解決方法です。

function parseTime( t ) {
   var d = new Date();
   var time = t.match( /(\d+)(?::(\d\d))?\s*(p?)/ );
   d.setHours( parseInt( time[1]) + (time[3] ? 12 : 0) );
   d.setMinutes( parseInt( time[2]) || 0 );
   return d;
}

var tests = [
  '1:00 pm','1:00 p.m.','1:00 p','1:00pm','1:00p.m.','1:00p','1 pm',
  '1 p.m.','1 p','1pm','1p.m.', '1p', '13:00','13', '1a', '12', '12a', '12p', '12am', '12pm', '2400am', '2400pm', '2400', 
  '1000', '100', '123', '2459', '2359', '2359am', '1100', '123p',
  '1234', '1', '9', '99', '999', '9999', '99999', '0000', '0011', '-1', 'mioaw' ];

for ( var i = 0; i < tests.length; i++ ) {
  console.log( tests[i].padStart( 9, ' ' ) + " = " + parseTime(tests[i]) );
}

他のいくつかの品種でも同様に動作するはずです (例えば a.m. が使用されていても動作します)。明らかにこれはかなり粗雑ですが、かなり軽量でもあります (たとえば、完全なライブラリよりもこれを使用する方がはるかに安価です)。

警告。このコードは 12:00 AM などでは動作しません。