geek-logo.jpg

メモをとるのは面倒くさいし、検索するのも面倒くさい。散らかるブックマークも好きじゃない・・・そんな理由も何かにつながる

相対的な経過時間

先日書いたPHP版相対的な経過時間を今回はJavaScriptに置き換えてみました。

 1. function relativeDate( d ){
 2.   var ts = d.getTime() / 1000;
 3.   var now_ts = new Date().getTime() / 1000;
 4.   var delta = now_ts - ts;
 5.   if( delta <= 60 ){
 6.     return '1分以内';
 7.   }else if( delta <= 86400 ){
 8.     var hours = parseInt(( delta / 3600 ), 10 );
 9.     var min = parseInt((( delta % 3600 ) / 60 ), 10 );
10.     if( hours && min ){
11.       return hours +'時間'+ min +'分前';
12.     }else if(hours){
13.       return hours +'時間前';
14.     }else if(min){
15.       return min +'分前';
16.     }
17.   }else if( delta <= 604800 ){
18.     var days = parseInt(( delta / 86400), 10 );
19.     var hours = parseInt((( delta % 86400 ) / 3600 ), 10 );
20.     if( days && hours ){
21.       return days +'日'+ hours +'時間前';
22.     }else if(days){
23.       return days +'日前';
24.     }else if(hours){
25.       return hours +'時間前';
26.     }
27.   }else{
28.     return d.getFullYear() +'年' +( d.getMonth() + 1 ) +'月' + d.getDate() + '日 '
               + d.getHours() +'時'+ d.getMinutes() +'分';
29.   }
30. }

1行目:
相対的な経過時間を求めたいDate型を受け取る関数を用意します。

2行目:
受け取ったDate型からタイムスタンプを取得します。PHPと違いgetTime関数は1970年1月1日午前0時からのミリ秒(1000分の1秒)を返すため、値を1000で割る必要があります。

3行目:
現在の日時が設定されたDate型からタイムスタンプを取得します。


4行目:
現在のタイムスタンプと経過時刻を求めたい日時のタイムスタンプの差分を求めます。

5〜6行:
3行目で求めた差分(以下、差分)の値が60以下の場合、60秒以下ということになるので、「1分以内」を返します。

7〜16行:
差分が86400(=60秒×60分×24時間)以下の場合、その差分は1日以内になるので、
さらに差分を3600(=60秒×60分)で割り整数にすることでN時間を求めます。
さらに差分を3600(=60秒×60分)で割った余りを60で割整数にすることでN分を求めます。

10〜11行:
N時間、N分共に0ではない場合、「N時間N分前」を返します。

12〜13行:
N分が0の場合、「N時間前」を返します。

14〜15行:
N時間が0の場合、「N分前」を返します。

17〜26行:
差分が604800(=86400(=60秒×60分×24時間)×7日)以下の場合、その差分は1週間以内になるので、
さらに差分を86400(=60秒×60分×24時間)で割り整数にすることでN日を求めます。
さらに差分を86400(=60秒×60分×24時間)で割った余りを3600で割整数にすることでN時間を求めます。

20〜21行:
N日、N時間共に0ではない場合、「N日N時間前」を返します。

22〜23行:
N時間が0の場合、「N日前」を返します。

24〜25行:
N日が0の場合、「N時間前」を返します。

27〜28行:
上記にも当てはまらなかった場合、「N年N月N日 N時N分」を返します。


JavaScriptを覚えるなら

JavaScript 第6版

新品価格
¥4,410から
(2013/5/7 15:34時点)

Posted by ひとりごとをつぶやくぼく JavaScript

コメント

コメントはありません。

お名前*
メールアドレス*
URL
コメント*
 

投稿されたコメントは管理者に承認された後に公開されます。

コメントする