C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■93541 / 2階層)  日付のフォーマットを変更したい
□投稿者/ ぬこ (6回)-(2019/12/20(Fri) 10:05:48)
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と入れた通りの日付を取得することができました。

ありがとうございました。
解決済み
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[1]: 日付のフォーマットを変更したい /魔界の仮面弁士 返信無し
 
上記関連ツリー

日付のフォーマットを変更したい / ぬこ (19/12/19(Thu) 17:09) #93534
Re[1]: 日付のフォーマットを変更したい / 魔界の仮面弁士 (19/12/19(Thu) 17:56) #93535
  ├ Re[2]: 日付のフォーマットを変更したい / 魔界の仮面弁士 (19/12/19(Thu) 18:29) #93536
  └ 日付のフォーマットを変更したい / ぬこ (19/12/20(Fri) 10:05) #93541 解決済み ←Now

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信