teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

相対日付計算を追加

2019/05/01 23:36

投稿

naomi3
naomi3

スコア1105

answer CHANGED
@@ -5,4 +5,33 @@
5
5
  var day = date.getDate();
6
6
  var dateString = date.getFullYear() + '-' + (month < 10 ? '0' : '') + month + '-' + (day < 10 ? '0' : '') + day;
7
7
  console.log(dateString);
8
+ ```
9
+ ・~秒前、~分前の値は切り捨てです。
10
+ ・1か月を一律(365.25 / 12)日とみなして計算しています。
11
+ ・未来の値は考慮していません。
12
+ ```JavaScipt
13
+ function toRelativeDate(ux) {
14
+ var date = new Date(parseInt(ux, 10));
15
+ var seconds = (new Date - date) / 1000;
16
+ var days = seconds / 3600 / 24;
17
+
18
+ if (seconds < 1) return '今';
19
+ if (seconds < 60) return Math.floor(seconds) + '秒前';
20
+ if (seconds < 3600) return Math.floor(seconds / 60) + '分前';
21
+ if (seconds < 3600 * 24) return Math.floor(seconds / 3600) + '時間前';
22
+ if (days < 365.25 / 12) return Math.floor(days) + '日前';
23
+ // 1か月を一律(365.25 / 12)日とみなして計算
24
+ if (days < 365.25) return Math.floor(days / 365.25 * 12) + 'か月前';
25
+ return date.getFullYear() + '年' + (date.getMonth() + 1) + '月' + date.getDate() + '日';
26
+ }
27
+
28
+ // テスト
29
+
30
+ console.log(toRelativeDate((new Date().valueOf() - 500).toString()));
31
+ console.log(toRelativeDate((new Date().valueOf() - 12700).toString()));
32
+ console.log(toRelativeDate((new Date().valueOf() - 34.5 * 60000).toString()));
33
+ console.log(toRelativeDate((new Date().valueOf() - 23.6 * 3600000).toString()));
34
+ console.log(toRelativeDate((new Date().valueOf() - 21.5 * 24 * 3600000).toString()));
35
+ console.log(toRelativeDate((new Date().valueOf() - 360 * 24 * 3600000).toString()));
36
+ console.log(toRelativeDate(new Date(2018, 5-1, 1).valueOf().toString()));
8
37
  ```