相対日付をフォーマットする
重要性: 4
次のように date
をフォーマットする関数 formatDate(date)
を書いてください。:
- もし
date
が1秒未満で渡された場合、"right now"
です。 - そうではなく、
date
が1分未満で渡された場合、"n sec. ago"
です。 - そうではなく、1時間未満の場合は
"m min. ago"
です。 - そ例外の場合はフォーマット
"DD.MM.YY HH:mm"
の完全な日付です。つまり:"day.month.year hours:minutes"
, すべて2桁の形式です。e.g.31.12.16 10:00
例:
alert
(
formatDate
(
new
Date
(
new
Date
-
1
)
)
)
;
// "right now"
alert
(
formatDate
(
new
Date
(
new
Date
-
30
*
1000
)
)
)
;
// "30 sec. ago"
alert
(
formatDate
(
new
Date
(
new
Date
-
5
*
60
*
1000
)
)
)
;
// "5 min. ago"
// yesterday's date like 31.12.2016, 20:00
alert
(
formatDate
(
new
Date
(
new
Date
-
86400
*
1000
)
)
)
;
date
から “今” までの 時間を取得するために – 日付を減算しましょう。
function
formatDate
(
date
)
{
let
diff =
new
Date
(
)
-
date;
// ミリ秒での差
if
(
diff <
1000
)
{
// 1秒未満
return
'right now'
;
}
let
sec =
Math.
floor
(
diff /
1000
)
;
// 差分を秒に変換
if
(
sec <
60
)
{
return
sec +
' sec. ago'
;
}
let
min =
Math.
floor
(
diff /
60000
)
;
// 差分を分に変換
if
(
min <
60
)
{
return
min +
' min. ago'
;
}
// 日付のフォーマット
// 1桁の 日/月/時/分 に先頭のゼロを追加
let
d =
date;
d =
[
'0'
+
d.
getDate
(
)
,
'0'
+
(
d.
getMonth
(
)
+
1
)
,
''
+
d.
getFullYear
(
)
,
'0'
+
d.
getHours
(
)
,
'0'
+
d.
getMinutes
(
)
]
.
map
(
component
=>
component.
slice
(
-
2
)
)
;
// すべてのコンポーネントの最後の2桁を取る
// コンポーネントを日付に連結
return
d.
slice
(
0
,
3
)
.
join
(
'.'
)
+
' '
+
d.
slice
(
3
)
.
join
(
':'
)
;
}
alert
(
formatDate
(
new
Date
(
new
Date
-
1
)
)
)
;
// "right now"
alert
(
formatDate
(
new
Date
(
new
Date
-
30
*
1000
)
)
)
;
// "30 sec. ago"
alert
(
formatDate
(
new
Date
(
new
Date
-
5
*
60
*
1000
)
)
)
;
// "5 min. ago"
// yesterday's date like 31.12.2016, 20:00
alert
(
formatDate
(
new
Date
(
new
Date
-
86400
*
1000
)
)
)
;
function
formatDate
(
date
)
{
let
diff =
new
Date
(
)
-
date;
// the difference in milliseconds
if
(
diff <
1000
)
{
// less than 1 second
return
'right now'
;
}
let
sec =
Math.
floor
(
diff /
1000
)
;
// convert diff to seconds
if
(
sec <
60
)
{
return
sec +
' sec. ago'
;
}
let
min =
Math.
floor
(
diff /
60000
)
;
// convert diff to minutes
if
(
min <
60
)
{
return
min +
' min. ago'
;
}
// format the date
// add leading zeroes to single-digit day/month/hours/minutes
let
d =
date;
d =
[
'0'
+
d.
getDate
(
)
,
'0'
+
(
d.
getMonth
(
)
+
1
)
,
''
+
d.
getFullYear
(
)
,
'0'
+
d.
getHours
(
)
,
'0'
+
d.
getMinutes
(
)
]
.
map
(
component
=>
component.
slice
(
-
2
)
)
;
// take last 2 digits of every component
// join the components into date
return
d.
slice
(
0
,
3
)
.
join
(
'.'
)
+
' '
+
d.
slice
(
3
)
.
join
(
':'
)
;
}