2011-12-25 13 views
6

Esiste qualche funzione timetostr in php che emetterà today/tomorrow/next sunday/etc. da un determinato timestamp? In modo che timetostr(strtotime(x))=xphp strtotime reverse

+2

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

+0

@Andypandy: So di 'date()'. Volevo chiedere, c'è una funzione diretta che farà il contrario di 'strtotime'? – prongs

+0

se non la data, non lo so ... potresti fornire qualche altro contesto? qualcosa del genere ($ timestring = date ('l', $ timestamp) non funziona? –

risposta

9

Questo potrebbe essere utile per le persone che vengono qui.

/** 
* 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

Ricevo un ERRORE: "elenco" imprevisto (T_LIST). Che cosa sto facendo di sbagliato? – hozza

+0

Qualcosa da fare con le versioni di PHP? Ho funzionato dichiarando la lista 'lista ($ singolare, $ plurale, $ fattore) = $ scala;' all'interno del foreach e sostituendo l'elenco nelle carrozzine di foreach con '$ list' – hozza

+0

Questo è corretto. PHP 5.5 ha aggiunto "Disimballaggio degli array annidati con list()" (http://php.net/manual/en/control-structures.foreach.php) –

1

Non può esistere una funzione di inversione perché non si tratta di una biiezione. La stringa di origine da cui si ottiene un timestamp UNIX quando si utilizza strtotime può essere formattata in molti modi diversi. Quindi, se decidi di invertire la funzione, come puoi sapere quale formato di stringa usare? Potrebbe essere il 2010-08-05 o il 10 settembre 2000, ecc. Questo è esattamente il motivo per cui non esiste una funzione di inversione, ma come ha giustamente detto Andypandy, devi usare date() che ti permette di definire effettivamente il formato di stringa che desideri terminare con. So che questa domanda è vecchia, ma ho pensato che meritasse questa risposta, così gli altri utenti capiscono perché non esiste una tale funzione in PHP.

+5

mentre tecnicamente "corretto" questo non risponde alla domanda dell'OP, piuttosto promuove solo uno stereotipo negativo del programmatore che conosce tutto, che conosce meglio del La persona che fa la domanda, un altro approccio sarebbe dire qualcosa di simile -> http://stackoverflow.com/a/3040437/830899 – unsynchronized

+3

data ("Ymd", time()) può fare il lavoro – Qinjie