2010-08-23 7 views
2

ok j'ai une dateil y a de temps en temps? sans utiliser strtime?

date('Y-m-d H:i:s'); 

comment pouvons-nous le faire comme il y a 0 secondes x année x mois x jour x minutes x il y a quelques secondes? mais sans useing le str_time (php 5.3.3)

modifier *

je veux dire est some.date - time.now = someyear quelque mois someminutes jour il y a someseconds. comme facebook ou stackoverflow (. Mis à jour je veux dire comme ça -. Adam Ramadhan 2 mins ago modifier) ​​

modifier * certains disent à sktime utiliser?

il y a 2 minutes.

Merci

Adam Ramadhan

+0

duplication possible de [PHP Comment trouver le temps écoulé depuis une date?] (Http://stackoverflow.com/questions/2915864/php-how-to-find-the-time-elapsed-since-a -date-time) – raveren

Répondre

1
function nicetime($fromDate, $toDate = NULL, $precision = -1, $separator = ', ', $divisors = NULL) { 

    if (is_null($toDate)) { 
     $toDate = $this->date_get('Asia/Jakarta'); 
    } 

    // Determine the difference between the largest and smallest date 
    $dates = array(strtotime($fromDate), strtotime($toDate)); 
    $difference = max($dates) - min($dates); 

    // Return the formatted interval 
    return $this->format_interval($difference, $precision, $separator, $divisors); 

} 

/** 
* Formats any number of seconds into a readable string 
* 
* @param int Seconds to format 
* @param string Seperator to use between divisors 
* @param int Number of divisors to return, ie (3) gives '1 Year, 3 Days, 9 Hours' whereas (2) gives '1 Year, 3 Days' 
* @param array Set of Name => Seconds pairs to use as divisors, ie array('Year' => 31536000) 
* @return string Formatted interval 
*/ 
function format_interval($seconds, $precision = -1, $separator = ', ', $divisors = NULL) 
{ 

    // Default set of divisors to use 
    if(!isset($divisors)) { 
     $divisors = Array(
      'Year'  => 31536000, 
      'Month'  => 2628000, 
      'Day'  => 86400, 
      'Hour'  => 3600, 
      'Minute' => 60, 
      'Second' => 1); 
    } 

    arsort($divisors); 

    // Iterate over each divisor 
    foreach($divisors as $name => $divisor) 
    { 
     // If there is at least 1 of thie divisor's time period 
     if($value = floor($seconds/$divisor)) { 
      // Add the formatted value - divisor pair to the output array. 
      // Omits the plural for a singular value. 
      if($value == 1) 
       $out[] = "$value $name"; 
      else 
       $out[] = "$value {$name}s"; 

      // Stop looping if we've hit the precision limit 
      if(--$precision == 0) 
       break; 
     } 

     // Strip this divisor from the total seconds 
     $seconds %= $divisor; 
    } 

    // FIX 
    if (!isset($out)) { 
     $out[] = "0" . $name; 
    } 

    var_dump($out); 
    // Join the value - divisor pairs with $separator between each element 
    return implode($separator, $out); 

} 
+0

cela fonctionne, merci les gars :) et viper-7 –

1

Pourquoi ne pas simplement soustraire 30 de la sortie de time()?

date('Y-m-d H:i:s',time()-30); 

time() retourne l'heure actuelle mesurée en termes de nombre de secondes écoulées depuis l'époque, donc en soustrayant 30 de lui donne l'horodatage du temps 30 sec il y a

+0

mis à jour. Je veux dire comme ça. –

0

assez simplement - vous avez besoin démarrer et horodatages actuels. Par exemple, pour voir le nombre de minutes passées à partir d'une date de début de ce soir (22/08/2010 21:00 PST):

$start = strtotime('8/22/2010 9pm'); 
printf('%d minutes ago', (time() - $start)/60); 
// My Output: 36 minutes ago. Will vary, depending on the current time/zone. 

Le 60 diviseur est d'obtenir minutes. Pendant quelques secondes, il n'y aurait pas de division. Pour les heures, les jours, les années, etc., utilisez des diviseurs différents. La solution suivante a une fonction d'exemple pour la mise en forme horodatages:

How to display "12 minutes ago" etc in a PHP webpage?

+1

yup cela fonctionne mais il utilise strtotime comme ma question n'utilise pas strtotime: | son erreur stricte. plus de façon? –

+1

Avez-vous défini votre fuseau horaire correctement? – Leon

+1

La fonction 'strtotime' est disponible depuis PHP 4 - pourquoi ne pas l'utiliser? http://us.php.net/strtotime – leepowers

1

J'ai trouvé la fonction suivante lors de la recherche sur google, je l'ai testé le code sur et il semble fonctionner parfaitement.

function ago($timestamp){ 
    $difference = time() - $timestamp; 
    $periods = array("second", "minute", "hour", "day", "week", "month", "years", "decade"); 
    $lengths = array("60","60","24","7","4.35","12","10"); 
    for($j = 0; $difference >= $lengths[$j]; $j++) 
    $difference /= $lengths[$j]; 
    $difference = round($difference); 
    if($difference != 1) $periods[$j].= "s"; 
    $text = "$difference $periods[$j] ago"; 
    return $text; 
    } 

alors vous appeler comme

echo ago($time); 
+0

wew son bloque mon ordinateur pour ($ j = 0; $ différence> = $ longueurs [$ j]; $ j ++), ne sais pas, mais il semble Undefined offset nombre illimité: | –

+0

Vous ne savez pas ce que vous voulez dire. Je viens de faire un google rapide, testé dans un de mes projets et cela a fonctionné sans problème en donnant le bon moment. – Christophe

2

Vous devriez essayer ce (ressemble exactement la réponse krike mais celui-ci est fixé!)

<?php 
function ago($timestamp){ 
    $difference = time() - $timestamp; 
    $periods = array("second", "minute", "hour", "day", "week", "month", "years", "decade"); 
    $lengths = array("60","60","24","7","4.35","12","10"); 
    for($j = 0; $difference >= $lengths[$j]; $j++) 
    $difference /= $lengths[$j]; 
    $difference = round($difference); 
    if($difference != 1) $periods[$j].= "s"; 
    $text = "$difference $periods[$j] ago"; 
    return $text; 
} 
?> 

Il suffit de faire this- -

echo ago($timeofthethingyouwant); 

Et rappelez-vous ceci w orks avec ce type de format de temps ----

time(); //Or it looks like this 1299951275! 

Ceci fonctionne à coup sûr et c'est un script génial!Pour plus de tête à ce Link--

http://drupal.org/node/61565

Je espère que ça marche!

+0

Si vous avez quelque chose de plus vieux que quelques années, il affiche «3 ans». Double "s". Besoin de changer "années" en "année" dans le tableau $ period. – b2238488

Questions connexes