Функция временной разблокировки

Привет, у меня теперь есть поиск в сети дыр, и я нашел много, но я просто не знаю, как заставить его работать, поэтому теперь я спрашиваю здесь о помощи

я хочу сделать это, тогда человек создаст комментарий, который должен сказать «создан 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 % даст вам остальную часть деления. Таким образом, если пост был создан меньше, чем день назад, тогда $numDays0 а $diffSeconds$diffSeconds , поэтому вы можете проверить и распечатать соответственно.

Редактирование. Мне стало любопытно, и я посмотрел в этом порядке. Оказывается, на этом возникает немало вопросов. Связывание некоторых:

Рассчитайте относительное время в C #, вычисляя и показывая дату как «secs ago», «mins ago», «hours ago» и т. Д., Что указывает на http://www.php.net/manual/en/function.time.php#89415