|  | ■No93535 (魔界の仮面弁士 さん) に返信 > ブラウザーに依存させず、確実に 2019年10月1日時点の
 > 日付が得られるようにしたいなら、入力された文字列を分解して
 >  startMon = new Date(2019, 9, 1);  // 日本時間(時差+9時間)
 > もしくは
 >  startMon = new Date(Date.UTC(2019, 9, 1));  // 協定世界時(時差+0時間)
 > の形式で処理するのが確実です。前者は JST、後者は UTC 時間です。
 > 月数は 0〜11 で指定する必要がある点に注意して下さい。
 >
 > ※前者は現地時間であり、必ずしもは JST とは限りません。
 >
 > 分解処理については、たとえばこんな感じ。
 >
 > var strYM = $("#text_startMon ").val();
 >
 > // 正しい年月指定になっているか確認する
 > if ( !/^\d{4}\/(0[1-9]|1[0-2])$/.test(strYM) )
 > {
 >  //
 >  // 不正な形式の場合
 >  //
 > } else {
 >  //
 >  // 正しい形式の場合
 >  //
 >  var ym = strYM.split(/\//);
 >  startMon = new Date(parseInt(ym[0], 10), parseInt(ym[1], 10) - 1, 1);
 > }
 
 ご回答ありがとうございます。
 魔界の仮面弁士さんが例であげていただいたコードを用いて修正致しました。
 
 下記修正文↓
 var strYM = $("#text_startMon ").val();
 // 正しい年月指定になっているか確認する
 if (!/^\d{4}\/(0[1-9]|1[0-2])$/.test(strYM)) {
 // 不正な形式の場合
 } else {
 // 正しい形式の場合
 var ym = strYM.split(/\//);
 startMon = new Date(Date.UTC(parseInt(ym[0], 10), parseInt(ym[1], 10) - 1, 1));
 
 }
 
 このような形にしたところ、上手くDate型として任意の日付を変更することができました。
 
 > たとえば、日本語の IE 環境の場合、通常は
 > ローカルタイムが日本標準時(+9時間)で実行されるため、
 >  // var dt = new Date("2019/10/01");
 >  var dt = new Date(2019, 9, 1);
 >  var s = dt.toJSON();
 > などは「"2019-09-30T15:00:00Z"」という文字列になりますし、
 >  var dt = new Date(Date.UTC(2019, 9, 1));
 >  var s = dt.toJSON();
 > の場合には「"2019-10-01T00:00:00Z"」という文字列になるでしょう。
 
 new Dateの後にDate.UTCを付け加えることによって、テキストボックスに2019/10と入れた通りの日付を取得することができました。
 
 ありがとうございました。
 
 |