私はこの質問が以前に2〜3回尋ねられたことを知っており、それらの質問の回答の1つで見つけた機能を使用しています(ここで確認してください)が、うまく機能していないようです。コメントで返信がありませんでしたので、ここで新しい質問を開きます。以下は、datetime(mysqlタイプ)からプレーンテキストの日付/時刻を取得するコードです。
function getElapsedTime($time_stamp)
{
$ts = convert_datetime($time_stamp);
$time_stamp = $ts;
$time_difference = strtotime('now') - $time_stamp;
if ($time_difference >= 60 * 60 * 24 * 365.242199)
{
return get_time_ago_string($time_stamp, 60 * 60 * 24 * 365.242199, 'year');
}
elseif ($time_difference >= 60 * 60 * 24 * 30.4368499)
{
return get_time_ago_string($time_stamp, 60 * 60 * 24 * 30.4368499, 'month');
}
elseif ($time_difference >= 60 * 60 * 24 * 7)
{
return get_time_ago_string($time_stamp, 60 * 60 * 24 * 7, 'week');
}
elseif ($time_difference >= 60 * 60 * 24)
{
return get_time_ago_string($time_stamp, 60 * 60 * 24, 'day');
}
elseif ($time_difference >= 60 * 60)
{
return get_time_ago_string($time_stamp, 60 * 60, 'hour');
}
elseif($time_difference <= 60)
{
return get_time_ago_string($time_stamp, 60, 'minute');
}
}
function get_time_ago_string($time_stamp, $divisor, $time_unit)
{
$time_difference = strtotime("now") - $time_stamp;
$time_units = floor($time_difference / $divisor);
settype($time_units, 'string');
if ($time_units === '0')
{
return 'less than 1 ' . $time_unit . ' ago';
}
elseif ($time_units === '1')
{
return '1 ' . $time_unit . ' ago';
}
else
{
return $time_units . ' ' . $time_unit . 's ago';
}
}
function convert_datetime($str) {
list($date, $time) = explode(' ', $str);
list($year, $month, $day) = explode('-', $date);
list($hour, $minute, $second) = explode(':', $time);
$timestamp = mktime($hour, $minute, $second, $month, $day, $year);
return $timestamp;
}
関数 getElapsedTime() がタイムスタンプを期待していると思ったので、mysql の日時の日付をタイムスタンプに変換する関数 convert_datetime() をもう 1 つ追加しました。だから今、私はmysqlの日時をgetElapsedTime()に渡し、convert_datetime()関数を使用してタイムスタンプに変換し、それを使用して文字列を取得しています。
ただし、日付が「分」または「秒」に返されることが期待される場合、負の値で返されます。たとえば、「2013-05-23 15:59:58」に対して「-182 分前」を返します。
誰もそれを成し遂げる方法を知っていますか?