php strtotime обратный

Есть ли в php функция timetostr, которая будет выводить today/tomorrow/next sunday/etc. с заданной меткой времени? Так что timetostr(strtotime(x))=x


person prongs    schedule 25.12.2011    source источник
comment
Дата(). См. php.net/manual/en/function.date.php   -  person Andrew Samuelsen    schedule 25.12.2011
comment
@Andypandy: Я знаю про date(). Я хотел спросить, есть ли прямая функция, которая будет делать обратное strtotime?   -  person prongs    schedule 25.12.2011
comment
если не свидание, я не знаю ... не могли бы вы дать еще контекст? что-то вроде этого ($ timestring = date ('l', $ timestamp) не работает?   -  person Andrew Samuelsen    schedule 25.12.2011
comment
Я написал один. Только что добавил переключатель над ($timestamp-strtodate('today'))/86400. Мне просто было интересно, была ли уже встроена функция в php.   -  person prongs    schedule 25.12.2011
comment
Проверьте это: - stackoverflow.com/questions/670161/   -  person Ayman Safadi    schedule 25.12.2011


Ответы (2)


Это может быть полезно для людей, приезжающих сюда.

/**
 * Format a timestamp to display its age (5 days ago, in 3 days, etc.).
 *
 * @param   int     $timestamp
 * @param   int     $now
 * @return  string
 */
function timetostr($timestamp, $now = null) {
    $age = ($now ?: time()) - $timestamp;
    $future = ($age < 0);
    $age = abs($age);

    $age = (int)($age / 60);        // minutes ago
    if ($age == 0) return $future ? "momentarily" : "just now";

    $scales = [
        ["minute", "minutes", 60],
        ["hour", "hours", 24],
        ["day", "days", 7],
        ["week", "weeks", 4.348214286],     // average with leap year every 4 years
        ["month", "months", 12],
        ["year", "years", 10],
        ["decade", "decades", 10],
        ["century", "centuries", 1000],
        ["millenium", "millenia", PHP_INT_MAX]
    ];

    foreach ($scales as list($singular, $plural, $factor)) {
        if ($age == 0)
            return $future
                ? "in less than 1 $singular"
                : "less than 1 $singular ago";
        if ($age == 1)
            return $future
                ? "in 1 $singular"
                : "1 $singular ago";
        if ($age < $factor)
            return $future
                ? "in $age $plural"
                : "$age $plural ago";
        $age = (int)($age / $factor);
    }
}
person rich remer    schedule 10.11.2013
comment
Я получаю ОШИБКУ: неожиданный «список» (T_LIST). Что я делаю неправильно? - person hozza; 11.09.2014
comment
Что-то делать с версиями PHP? Я заставил его работать, объявив список list($singular, $plural, $factor) = $scale; внутри foreach и заменив список в колясках foreach на $list - person hozza; 11.09.2014
comment
Это правильно. В PHP 5.5 добавлена ​​распаковка вложенных массивов с помощью list () (php.net/manual/en /control-structures.foreach.php) - person rich remer; 11.09.2014
comment
Спасибо! Это сэкономило мне много времени. Это должна быть встроенная функция! - person SuprMan; 09.05.2018

Не может быть strtotime обратной функции, потому что это не биекция. Исходная строка, из которой вы получаете метку времени UNIX при использовании strtotime, может быть отформатирована множеством различных способов. Итак, если вы решите отменить функцию, как узнать, какой строковый формат использовать? Это вполне может быть 05.08.2010 или 10 сентября 2000 и т. Д. Именно поэтому обратной функции нет, но, как правильно сказал Andypandy, вы должны использовать date(), который позволяет вам фактически определять формат строки, который вы хотите в конечном итоге с участием. Я знаю, что это старый вопрос, но я подумал, что он заслуживает этого ответа, чтобы другие пользователи понимали, почему в PHP нет такой функции.

person barakadam    schedule 28.12.2012
comment
хотя технически это правильно, это не отвечает на вопрос ОП, скорее, это просто способствует негативному стереотипу всезнающего программиста, который знает лучше, чем человек, задающий вопрос. другой подход - сказать что-то вроде этого: ›stackoverflow.com/a/3040437/830899 - person unsynchronized; 25.12.2013
comment
date (Y-m-d, time ()) может выполнить эту работу. - person Qinjie; 30.12.2014