2011-12-25 34 views
6

¿Hay alguna función timetostr en php que genere today/tomorrow/next sunday/etc. desde una fecha y hora determinada? De modo que timetostr(strtotime(x))=xphp strtotime reverse

+2

date(). Ver http://php.net/manual/en/function.date.php –

+0

@Andypandy: Sé acerca de 'date()'. Quise preguntar, ¿hay una función directa que haga el reverso de 'strtotime'? – prongs

+0

si no es la fecha, no sé ... ¿podrías darnos un poco más de contexto? algo como esto ($ timestring = date ('l', $ timestamp) no funciona? –

Respuesta

9

Esto podría ser útil para las personas que vienen aquí.

/** 
* 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); 
    } 
} 
+0

Me aparece un ERROR: 'lista' inesperada (T_LIST). ¿Qué estoy haciendo mal? – hozza

+0

¿Algo relacionado con las versiones de PHP? Lo hice funcionar declarando la lista 'list ($ singular, $ plural, $ factor) = $ scale;' dentro de foreach y reemplazando la lista en los carritos de visita foreach con '$ list' – hozza

+0

Eso es correcto. PHP 5.5 agregó "Desempaquetar matrices anidadas con list()" (http://php.net/manual/en/control-structures.foreach.php) –

1

No puede haber una función inversa strtotime porque esto no es una biyección. La cadena de origen de la que obtiene una marca de tiempo UNIX cuando usa strtotime se puede formatear de muchas formas diferentes. Entonces, si decide revertir la función, ¿cómo puede saber qué formato de cadena usar? Bien podría ser 2010-08-05 o 10 de septiembre de 2000, etc. Esta es exactamente la razón por la cual no hay una función inversa, pero como bien dijo Andypandy, debe usar date() que le permite definir realmente el formato de cadena que desea finalizar arriba con. Sé que esta pregunta es antigua, pero pensé que merecía esta respuesta para que otros usuarios entiendan por qué no hay tal función en PHP.

+5

aunque técnicamente es "correcto", esto no responde a la pregunta del OP, sino que promueve un estereotipo negativo del programador conocedor que sabe mejor que el persona que hace la pregunta. Otro enfoque sería decir algo como esto -> http://stackoverflow.com/a/3040437/830899 – unsynchronized

+3

fecha ("Ymd", time()) puede hacer el trabajo. – Qinjie