phpを使用して、指定した日付と現在の日付の間の日付間隔を計算しています。これを行うと、次のようなソーシャルフレンドリーなタイムスタンプを印刷できますA few mins ago
。2 hours ago
私が時間の部分に来るとき、私はphpで本当に面白い振る舞いをする何かを手に入れます。以下は完全に機能するコードですが、パーツをこのコードに置き換えると、hours
常に3時間印刷されます。
定義された定数DATE
// The current date timestamp
define('DATE', time());
ここにバギーコード:
//Only the hours part that' doing something weird
case ($interval >= 3600 && $interval < 86400) :
$return = ( date('H', $interval) < 2)
? (int)date('H', $interval) . ' hour ago'
: (int)date('H', $interval) . ' hours ago';
break;
指定された日付、たとえばこの場合は作成日が1時間強前である場合に中断するため、間隔は3660秒になります。dateメソッドの呼び出しのdate('H', 3660)
結果は03のようです。結果は01になるべきではありませんか?やっぱり1時間強です。
ここでの作業コード:
public static function getTimeInterval($date)
{
$interval = DATE - $date;
$return = '';
switch ( $interval )
{
case ($interval <= 60) :
$return = 'a few secs ago';
break;
case ($interval > 60 && $interval < 3600) :
$return = (int)date('i', $interval) . ' mins ago';
break;
case ($interval >= 3600 && $interval < 86400) :
$return = ( abs((date('G', DATE) - date('G', $date))) < 2)
? abs((date('G', DATE) - date('G', $date))) . ' hour ago'
: abs((date('G', DATE) - date('G', $date))) . ' hours ago';
break;
case ($interval >= 86400 && $interval < 604800) :
$return = ( (int)date('j', $interval) === 1)
? (int)date('j', $interval) . ' day ago'
: (int)date('j', $interval) . ' days ago';
break;
case ($interval > 604800 && $interval <= 2592000) :
$return = 'A few weeks ago';
break;
case ($interval > 2592000) :
$return = date('n', $interval) . ' months ago';
break;
case ($interval > 31536000) :
$return = 'Over a year ago';
break;
}
return $return;
}