Привет, у меня теперь есть поиск в сети дыр, и я нашел много, но я просто не знаю, как заставить его работать, поэтому теперь я спрашиваю здесь о помощи
я хочу сделать это, тогда человек создаст комментарий, который должен сказать «создан 1 секунда назад», а затем 1 мин и 1 час и вот так 🙂
может кто-нибудь мне помочь?
благодаря
Это в основном читаемый человеком формат и может быть дополнен математическими проверками для проверки расстояния времени, рабочего фрагмента ниже:
function RelativeTime($timestamp) { $difference = time() - $timestamp; $periods = array("sec", "min", "hour", "day", "week", "month", "years", "decade"); $lengths = array("60","60","24","7","4.35","12","10"); if ($difference > 0) { $ending = "ago"; } else { $difference = -$difference; $ending = "to go"; } for($j = 0; $difference >= $lengths[$j]; $j++) { $difference /= $lengths[$j]; } $difference = round($difference); if($difference != 1) { $periods[$j].= "s"; } return $difference . $periods[$j] . $ending; }
Это будет делать будущие временные метки, такие как 12 days to go
а также временные метки, такие как 12 days ago
Надеюсь это поможет.
Оригинальный источник: http://blog.evandavey.com/2008/04/php-date-in-human-readable-form-facebook-style.html
Я думаю, что это именно то, что вы хотите. Когда вы используете функцию, установите параметр $ deep в 1.
function timespan($seconds = 1, $time = '', $deep = NULL) { $CI = & get_instance(); $CI->lang->load('date'); $current_deep = 0; if (!is_numeric($seconds)) { $seconds = 1; } if (!is_numeric($time)) { $time = time(); } if ($time <= $seconds) { $seconds = 1; } else { $seconds = $time - $seconds; } $str = ''; $years = floor($seconds / 31536000); if ($years > 0) { $str .= $years . ' ' . $CI->lang->line((($years > 1) ? 'date_years' : 'date_year')) . ', '; if (++$current_deep == $deep) return substr(trim($str), 0, -1); } $seconds -= $years * 31536000; $months = floor($seconds / 2628000); if ($years > 0 OR $months > 0) { if ($months > 0) { $str .= $months . ' ' . $CI->lang->line((($months > 1) ? 'date_months' : 'date_month')) . ', '; if (++$current_deep == $deep) return substr(trim($str), 0, -1); } $seconds -= $months * 2628000; } $weeks = floor($seconds / 604800); if ($years > 0 OR $months > 0 OR $weeks > 0) { if ($weeks > 0) { $str .= $weeks . ' ' . $CI->lang->line((($weeks > 1) ? 'date_weeks' : 'date_week')) . ', '; if (++$current_deep == $deep) return substr(trim($str), 0, -1); } $seconds -= $weeks * 604800; } $days = floor($seconds / 86400); if ($months > 0 OR $weeks > 0 OR $days > 0) { if ($days > 0) { $str .= $days . ' ' . $CI->lang->line((($days > 1) ? 'date_days' : 'date_day')) . ', '; if (++$current_deep == $deep) return substr(trim($str), 0, -1); } $seconds -= $days * 86400; } $hours = floor($seconds / 3600); if ($days > 0 OR $hours > 0) { if ($hours > 0) { $str .= $hours . ' ' . $CI->lang->line((($hours > 1) ? 'date_hours' : 'date_hour')) . ', '; if (++$current_deep == $deep) return substr(trim($str), 0, -1); } $seconds -= $hours * 3600; } $minutes = floor($seconds / 60); if ($days > 0 OR $hours > 0 OR $minutes > 0) { if ($minutes > 0) { $str .= $minutes . ' ' . $CI->lang->line((($minutes > 1) ? 'date_minutes' : 'date_minute')) . ', '; if (++$current_deep == $deep) return substr(trim($str), 0, -1); } $seconds -= $minutes * 60; } if ($str == '') { $str .= $seconds . ' ' . $CI->lang->line((($seconds > 1) ? 'date_seconds' : 'date_second')) . ', '; } return substr(trim($str), 0, -1); }
Источник
Предполагая, что у вас есть разница $now - $creation_time
в секундах, способ сделать это – разделить его на X секунд (1 минута = 60, 1 час = 3600, 1 день = 86400), начиная с наибольшего числа, чтобы узнать, сколько из этих единиц вписываются в ваше время создания, а затем используйте его остаток, чтобы попытаться установить меньшие единицы.
$diffSeconds = time() - $creation_time ; $numDays = $diffSeconds / 86400 ; $remainderDaySeconds = $diffSeconds % 86400 ; $numHours = $remainderDaySeconds / 3600 ; $remainderSeconds = $remainderDaySeconds % 3600 ;
Оператор modulo %
даст вам остальную часть деления. Таким образом, если пост был создан меньше, чем день назад, тогда $numDays
– 0
а $diffSeconds
– $diffSeconds
, поэтому вы можете проверить и распечатать соответственно.
Редактирование. Мне стало любопытно, и я посмотрел в этом порядке. Оказывается, на этом возникает немало вопросов. Связывание некоторых:
Рассчитайте относительное время в C #, вычисляя и показывая дату как «secs ago», «mins ago», «hours ago» и т. Д., Что указывает на http://www.php.net/manual/en/function.time.php#89415