@yam33 (邦彦 山中)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

HTML+Javascriptで○○日後の日付を表示したい

解決したいこと

日付データ(例 2021.06.11) を120日後の日付を表示したいです。
素人ながら調べながら書いたのですが、ブラウザによっては正しく表示されません。

発生している問題・エラー

Windows  Edge ○  Chrome ○  Firefox X
Mac Safari X  Chrome ○  Firefox X

NaN.aN.aN と表示される

該当するソースコード

<script type="text/javascript">
<!--
    var today = new Date('2021.06.11');    // 日付
    var n=120;    //n
    var date = new Date( today.getTime() + n*24*60*60*1000 );    // n日後
    var year = date.getFullYear();
    var mm = ("0"+(date.getMonth() + 1)).slice(-2);
    var dd = ("0"+date.getDate()).slice(-2); // 08
    document.write(year,".",mm,".",dd);
//-->
</script>

自分で試したこと

文法等よくわかりません。
教えて下さい。

0 likes

4Answer

日付周りはうるう年とか色々面倒なことが多いし、すでに多くの日付ライブラリもあり自力でやるのは車輪の再発明になるのであまり意味がありません。

通常はmomentjsとかdayjsとかのライブラリを使います。

英語が難しければdeepL

1Like

Comments

  1. @yam33

    Questioner

    教えて頂きありがとうございます。
    ライブラリがあるのですね。
    参考にさせて頂きます。

ブラウザによっては正しく表示されません。

文字列で日付を渡す場合は、Date('2021.06.11')Date('2021/06/11')としないとブラウザによっては解釈されません。

また、単純に○日前/○日後とするのであれば、getDate()に対して日数を加減した値をsetDate()に渡せばよいです。

const date = new Date();
date.setDate(date.getDate() + 120);
console.log(date);

車輪の再発明云々に関しては、アルゴリズムを考えたり各メソッドの意味を理解する力を付けるためには私は無意味なことだとは思いません。

0Like

Comments

  1. @yam33

    Questioner

    シンプルな記述で大変参考になりました。
    ありがとうございました!!

基本的にはMDNを見てほしいのですが、ECMAScriptの仕様書に受け入れられる日付の書き方(ISO 8601)の記載がありますので、それに従っていただければ問題ないです。

年月日:1970-01-01
+時刻:1970-01-01T23:59:59
タイムゾーン:1970-01-01T23:59:59+09:00(日本時間)

仕様書にない形式は各ブラウザがなんとなく解釈してあげているだけなので、ブラウザによっては受け付けないこともあるということです。

0Like

Comments

  1. @yam33

    Questioner

    最初に入れる日付のフォーマットを変更しましたら表示されました。
    ありがとうございました。

皆様の教えを参考にさせて頂き、希望の表記ができました。
この度はありがとうございました。

const date = new Date('2021/08/01');	// 入力日付は0000/00/00 スラッシュ区切り
date.setDate(date.getDate() + 120);
var str = date.getFullYear()
    + '/' + ('0' + (date.getMonth() + 1)).slice(-2)
    + '/' + ('0' + date.getDate()).slice(-2) ;
	document.write(str);
0Like

Your answer might help someone💌