質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

4回答

1817閲覧

日数から年月日を求めたい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2019/08/01 06:29

お世話になっています。
何かの記念日を入力したら、今日で何年何ケ月何日です。というプログラムを組みたいのですが、実装方法がわかりません。
丸投げになっているのはわかっていますが、どうしても日数までしかできなく...

以下がコードになります。

js

1 var year = 2005; 2 var month = 6; 3 var day = 18; 4 5 var date1 = new Date(year, month-1, day); //任意の記念日を入れる 6 var date2 = new Date(); 7 8 var diff = date2.getTime() - date1.getTime(); 9 var dayDiff = Math.floor(diff / 1000 / 60 / 60 / 24); 10 console.log(dayDiff);//5157

日数から、どのようにして、何年何ケ月何日経過しました。と結果が出るように計算すれば良いでしょうか。
ご教示いただけましたら助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

Moment.js を使うと楽です。

使わない場合、日数だけからは計算できません。できないというより、不正確な値しかでません。たとえば 同じ 30 日間でも、2 月を挟めば一カ月になりますし、1 月 1 日からであれば一カ月になりません。

日数ではなく日付から計算してください。

計算は条件分岐を使うことになります。例えばスタートの日付が 5 月 1 日であったとします。すると次の年の 5 月 1 日で一年になります。

今日の年からスタートの年を引き算し、今日の日付の月日がスタート日の月日より前であれば 1 を引きます。これで経過年数が出ます。経過月日も同様に分岐して求めてください。月の場合は引き算の結果がマイナスになれば 12 を足す必要がありますし、日の場合は月末日を足す必要があります。

投稿2019/08/01 06:40

編集2019/08/01 06:45
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/08/01 07:05

ありがとうございます。 やってみます。
guest

0

簡単に書くとこんな感じ。
計算量が増えるので気になるところを改良してみてはどうでしょうか。

JavaScript

1function calc(dt1, dt2, method) { 2 var dt = new Date(dt1); 3 var getMethod = 'get' + method; 4 var setMethod = 'set' + method; 5 var val = 0; 6 while (dt < dt2) { 7 dt[setMethod](dt[getMethod]() + 1); 8 val++; 9 } 10 11 if (dt > dt2) { 12 val--; 13 } 14 15 dt1[setMethod](dt1[getMethod]() + val); 16 return val; 17} 18 19// dt1 < dt2 20function diff(dt1, dt2) { 21 var method = [ 'FullYear', 'Month', 'Date' ]; 22 var result = []; 23 for (var i = 0; i < method.length; i++) { 24 result.push(calc(dt1, dt2, method[i])); 25 } 26 27 return result; 28} 29 30console.log(diff(new Date(2005, 6 - 1, 18), new Date())); // [14, 1, 14]

投稿2019/08/01 07:58

編集2019/08/01 08:11
x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

投稿2019/08/01 06:53

nanami12

総合スコア1015

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/08/01 06:55

言語が違いますね。
nanami12

2019/08/01 06:56

失礼しました
guest

0

「Javascript 日付 差分」で検索したら以下のサイトが見つかりました。参考になればと存じます。

http://aok.blue.coocan.jp/html5/jscript/datediff.html

http://write-remember.com/program/javascript/date_diff/

投稿2019/08/01 06:36

編集2019/08/01 06:46
decatail

総合スコア41

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/08/01 06:39

ありがとうございます。 日数は既に割り出せています。 日数から年月日に変換したいです。
decatail

2019/08/01 06:40

すみません。URLを間違えました。ちょっと待っててください。
退会済みユーザー

退会済みユーザー

2019/08/01 06:42

ありがとうございます。 自分でも調べてみます。
decatail

2019/08/01 06:46

お待たせしました。変更してみました。
退会済みユーザー

退会済みユーザー

2019/08/01 06:49

ありがとうございます。 掲載いただきました、URLは既に拝見済みですが、 少し複雑だったので、もっと簡易的なものがないか探していたところでした。 こちら、やっぱり解読してみます。 ありがとうございます。
Zuishin

2019/08/01 06:53

回答していますので、無視するのであれば同じ解決方法は選ばないようにしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問