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

わんくま同盟

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

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

■93535 / 1階層)  日付のフォーマットを変更したい
□投稿者/ 魔界の仮面弁士 (2532回)-(2019/12/19(Thu) 17:56:05)
2019/12/19(Thu) 19:09:51 編集(投稿者)

No93534 (ぬこ さん) に返信
> テキストボックスに入力した日付(例:2019/10)をDate型に変換したいと考えております。

var s = $("#text_startMon ").val();
によって、s に "2019/10" が得られる状態なのですね。

"yyyy/MM" 以外の入力値、たとえば "H30/12" とか "2020-04" とか "" などが
入力された場合のチェックも、事前に組み込む必要があるかもしれません。


> startMon = new Date($("#text_startMon ").val());
> そこで上記のようにしたのですがInvalid Date(無効の日付)と表示され、上手くいきませんでした。

文字列を渡す手法はブラウザ依存性が強いため避けてください。
たとえば
  new Date("2019/10")
の場合、IE では NaN、Chrome では 2019年10月1日となります。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date


ブラウザーに依存させず、確実に 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);
}


> 今度は何故か日付が2019/09/30となっていました。

たとえば、日本語の 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"」という文字列になるでしょう。
編集キー/

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

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

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