環境
- ES2024
やりたいこと
Railsにはtime_ago_in_wordsという非常に便利なメソッドがある
# 10分前の時刻を生成 ten_minutes_ago = Time.now - 10.minutes # time_ago_in_wordsを使用して相対時間を表示 puts time_ago_in_words(ten_minutes_ago)
これをJavaScriptでも実現したい
コード
実はRails公式がJSコードを公開してくれている。
が16年前のコードでvarだったり == だったりと最新のJS仕様についていけてないのでChatGPTにリファクタリングしてもらった
直してもらったコード
export const timeAgoInWords = (from) => { return distanceOfTimeInWords(new Date(), from); }; const distanceOfTimeInWords = (to, from) => { const distanceInSeconds = (to - from) / 1000; const distanceInMinutes = Math.floor(distanceInSeconds / 60); if (distanceInMinutes === 0) { return '1分未満前'; } if (distanceInMinutes === 1) { return '1分前'; } if (distanceInMinutes < 45) { return `${distanceInMinutes}分前`; } if (distanceInMinutes < 90) { return '約1時間前'; } if (distanceInMinutes < 1440) { return `約${Math.floor(distanceInMinutes / 60)}時間前`; } if (distanceInMinutes < 2880) { return '1日前'; } if (distanceInMinutes < 43200) { return `${Math.floor(distanceInMinutes / 1440)}日前`; } if (distanceInMinutes < 86400) { return '約1ヶ月前'; } if (distanceInMinutes < 525960) { return `${Math.floor(distanceInMinutes / 43200)}ヶ月前`; } if (distanceInMinutes < 1051199) { return '約1年前'; } return `${Math.floor(distanceInMinutes / 525960)}年以上前`; };
サンプルコード
// 現在時刻から10分前のDateオブジェクトを生成 const tenMinutesAgo = new Date(Date.now() - 10 * 60 * 1000); // timeAgoInWords関数を使用して相対時間を表示 console.log(timeAgoInWords(tenMinutesAgo));
ちなみに
書き終わってから知ったがDay.jsでも相対時刻の表示はできたっぽい。。。