Я пытаюсь преобразовать временную метку формата 2009-09-12 20:57:19
и превратить ее во что-то вроде 3 minutes ago
PHP.
Я нашел полезный скрипт для этого, но думаю, что он ищет другой формат, который будет использоваться в качестве переменной времени. Сценарий, который я хочу изменить для работы с этим форматом:
function _ago($tm,$rcs = 0) {
$cur_tm = time();
$dif = $cur_tm-$tm;
$pds = array('second','minute','hour','day','week','month','year','decade');
$lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600);
for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = $cur_tm-($dif%$lngh[$v]);
$no = floor($no);
if($no <> 1)
$pds[$v] .='s';
$x = sprintf("%d %s ",$no,$pds[$v]);
if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0))
$x .= time_ago($_tm);
return $x;
}
Я думаю, что в этих первых строках скрипт пытается сделать что-то похожее на это (другой формат даты - математика):
$dif = 1252809479 - 2009-09-12 20:57:19;
Как мне конвертировать мою метку времени в этот (Unix?) Формат?
Ответы:
Пример использования:
Ввод может быть любым поддерживаемым форматом даты и времени .
Вывод :
Функция:
источник
$full
должна быть строковым вводом для фильтрации вывода по мере необходимости). напримерtime_elapsed_string($datetime, $format = "ymw")
. PS Плоская версия: stackoverflow.com/a/5010169/318765$full = false
на$level = 7
иif (!$full) $string = array_slice($string, 0, 1);
на$string = array_slice($string, 0, $level);
и позвоните,time_elapsed_string($datetime, 2)
чтобы получить только две строки с самой высокой датой. Я думаю, что это должно соответствовать всем потребностям.Unknown property (w)
на этой линии$diff->w = floor($diff->d / 7);
Unknown property (w)
в PHP5.3 и ниже, конвертируйте $ diff из объекта в массив и соответственно корректируйте оставшуюся часть кода. У меня есть исправление, размещенное здесь: stackoverflow.com/a/32723846/235633источник
30days for month
, и12x30days for year
, и из-за этого, оно возвратит недопустимое число лет ниже года <= 1978. Пример, где оно возвращает 39 лет, но должно 38. И это также не работает для годы ниже 1970 года.источник
На самом деле это лучшее решение, которое я нашел. Использует JQuery, однако он работает отлично. Также он обновляется автоматически аналогично тому, как это делают SO и Facebook, поэтому вам не нужно обновлять страницу, чтобы увидеть обновления.
Этот плагин будет читать ваш
datetime
attr в<time>
теге и заполнять его для вас.http://timeago.yarp.com/
источник
Я не знаю, почему никто еще не упоминает Carbon.
https://github.com/briannesbitt/Carbon
На самом деле это расширение php dateTime (которое уже использовалось здесь) и имеет метод diffForHumans. Так что все, что вам нужно сделать, это:
другие примеры: http://carbon.nesbot.com/docs/#api-humandiff
Плюсы этого решения:
источник
Я нашел результаты, как следующие уродливые:
Из-за этого я реализовал функцию, которая уважает множественное число, удаляет пустые значения и, возможно, возможно сократить вывод:
Выглядит намного лучше:
При желании используйте,
$level = 2
чтобы сократить его следующим образом:Удалите
$lang
деталь, если она вам нужна, только на английском языке или отредактируйте этот перевод в соответствии со своими потребностями:источник
explode
иarray_combine
.источник
Я немного изменил исходную функцию (на мой взгляд, более полезную или логичную).
источник
я сделал это, и он работает просто отлично, он работает как Unix Timestamp, как
1470919932
или отформатированное время, как16-08-11 14:53:30
источник
switch (true)
хотя$time
оценитtrue
?Просто добавить другой вариант ...
Хотя я предпочитаю размещать здесь метод DateTime , мне не понравилось то, что он отображал 0 лет и т. Д.
источник
это поможет вам проверить это
источник
Я обычно использую это, чтобы узнать разницу между
current
иpassed
datetime stamp
ВЫВОД
КОД
источник
Я знаю, что здесь есть несколько ответов, но это то, что я придумал. Это только обрабатывает значения MySQL DATETIME в соответствии с исходным вопросом, на который я отвечал. Массив $ a нуждается в некоторой работе. Я приветствую комментарии о том, как улучшить. Звоните как:
echo time_elapsed_string ('2014-11-14 09:42:28');
источник
Я попробовал это и отлично работает для меня
Проверьте эту ссылку для справки здесь
Спасибо! и получайте удовольствие.
источник
Это то, что я пошел с. Это модифицированная версия сообщения Абббас хана:
источник
Многие решения здесь не учитывают округление. Например:
Событие произошло в 3 часа дня два дня назад. Если вы проверяете в 2 часа дня, это покажет один день назад. Если вы проверяете в 4 вечера, это покажет два дня назад.
Если вы работаете с Unix Time, это помогает:
Это не идеально, если вы беспокоитесь о високосных секундах и летнем времени.
источник
Попробуйте это, я нашел это из моих старых кодов, который показывает правильный результат
Пример:
echo ago('2020-06-03 00:14:21 AM');
Вывод:
6 days
источник
Вам нужно будет взять каждую отдельную часть вашей временной метки и преобразовать ее во время Unix. Например, для отметки времени, 2009-09-12 20:57:19.
(((2008-1970) * 365) + (8 * 30) +12) * 24 + 20 даст вам приблизительную оценку часов с 1 января 1970 года.
Возьмите это число, умножьте на 60 и прибавьте 57, чтобы получить минуты.
Возьмите это, умножьте на 60 и прибавьте 19.
Это, однако, конвертировало бы это очень грубо и неточно.
Есть ли какая-то причина, по которой вы не можете просто взять нормальное время Unix для начала?
источник
Существует некоторая проблема с некоторыми языками отображения времени назад, например, на арабском языке есть 3 необходимых формата для отображения даты. Я использую эти функции в своих проектах, надеюсь, они могут кому-то помочь (любое предложение или улучшение, я буду стараться :))
источник
Если вы используете PostgreSQL, он сделает всю работу за вас:
источник
источник
Вот мое решение, пожалуйста, проверьте и измените в соответствии с вашими требованиями
Спасибо
источник
источник
Эта функция не предназначена для использования на английском языке. Я перевел слова на английский. Это требует дополнительной фиксации перед использованием для английского языка.
источник
Использование:
Функция:
источник
Слегка измененный ответ сверху:
источник
Следующее является очень простым и чрезвычайно эффективным решением.
эхо timeElapsed (1201570814);
Образец вывода:
6 лет 4 месяца 3 недели 4 дня 12 часов 40 минут и 36 секунд.
источник
Вот мое решение для модуля уведомлений, который я построил некоторое время назад. Он возвращает вывод, аналогичный выпадающему списку уведомлений Facebook (например, 1 день назад, только сейчас и т. Д.).
источник
просто передайте дату и время этой функции. он будет распечатан в формате времени назад для вас
источник
Я использую следующую функцию в течение нескольких лет. И это работает нормально:
источник