2 つの日付列を持つテーブルがあります。1 つはタイムスタンプ値 (例: 1359380165) で、もう 1 つは通常の日時値 (例: 2013-01-28 08:32:53) です。
現在 (Current) と上記の日付との間の経過時間を調べたいです。したがって、結果は次のようになります。
- Daniel は 5 分前にパスワードを変更しました
- ジェニファーは 3 日前に電話番号を削除しました。
何か案は?
この関数は、あなたが求めているものと同様のことを行う必要があります。試してみてください。「1359380165」のような unix タイムスタンプが必要です。
function getRelativeTime($timestamp)
{
$timeDifference = time() - $timestamp;
$timePeriods = array('second', 'minute', 'hour', 'day', 'week','month', 'years', 'decade');
$timeLengths = array('60', '60', '24', '7', '4.35', '12', '10');
if ($timeDifference > 0)
{
$timeSuffix = 'ago';
}
else
{
$timeDifference = -$timeDifference;
$timeSuffix = 'to go';
}
for($i = 0; $timeDifference >= $timeLengths[$i]; $i++)
{
$timeDifference/= $timeLengths[$i];
$timeDifference = round($timeDifference);
}
if($timeDifference != 1) $timePeriods[$i].= 's';
return $timeDifference . ' ' . $timePeriods[$i] . ' ' . $timeSuffix;
}
次のようなテーブルを想定します。
id int unsigned not null auto_increment primary key
username varchar(45) not null
utime int
dtime timestamp
PHP が両方のタイムスタンプを同じ形式で受け取るようにクエリを構成しないのはなぜですか? このようなもの:
SELECT id, username, FROM_UNIXTIME(utime, '%Y-%m-%d %H.%i.%s') AS ut, dtime AS dt FROM mytable;
また
SELECT id, username, utime AS ut, UNIX_TIMESTAMP(dtime) as dt FROM mytable;
次に、ut と dt の両方を同じ方法で処理できます。
ここには素敵な相対時間関数があります。UNIX タイムスタンプが必要です。