スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

JavaScriptでPostgreSQLのタイムスタンプ型をTwitterのWebっぽい時間で表示する

追記
修正しました。
ソースはこちら

TwitterのWebって、一日以内だと1分前とか1時間前とか表示されて、それ以上時間が経っていると、つぶやいた時間が表示されます。
ということで、タイトル通りの変換をかけたいと思います。

PostgreSQLのタイムスタンプ型は「2010-09-11 22:52:30+09」というような表現になっています。
これをパースしてJavaScriptのDate型にした後、現在時間と比較して、ふさわしい表示を返します。

ちなみに、なんでいつものPHPでなくJavaScriptなのかというと、表示している間も経過時間をつど変更するため、クライアントで行う必要があったためです。

function makeTwitterDate(src) {
src.match(/(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)/);
date = new Date(RegExp.$1, Number(RegExp.$2) - 1, RegExp.$3
, RegExp.$4, RegExp.$5, RegExp.$6);
now = new Date();
diff = now.getTime() - date.getTime();
if (diff < 1000 * 60) {
return Math.round(diff / 1000) + "秒前";
} else if (diff < 1000 * 60 * 60) {
return Math.round(diff / (1000 * 60)) + "分前";
} else if (diff < 1000 * 60 * 60 * 24) {
return Math.round(diff / (1000 * 60 * 60)) + "時間前";
} else {
var monthAry = ['Jan', 'Feb', 'Mar', 'Apl', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var hour = date.getHours();
var ampm = " AM ";
if (hour > 12) {
hour = hour - 12;
ampm = " PM ";
}
var minute = String(date.getMinutes());
if (minute.length == 1) {
minute = "0" + minute;
}
var day = date.getDate();
var prefix = "th";
switch (day) {
case 1 :
prefix = "st";
break;
case 2 :
prefix = "nd";
break;
case 3 :
prefix = "rd";
break;
}
var year = "";
if (now.getFullYear() != date.getFullYear()) {
year = ", " + String(date.getFullYear());
}
return String(hour) + ":" + minute + ampm
+ monthAry[date.getMonth()] + ' '
+ String(day) + prefix + year;
}
}
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。