2010-06-21 4 views
0

J'essaie de sauver l'heure dans la base de données pour quand un utilisateur ajoute une entrée. Chaque fois que j'exécute la fonction time(), elle imprime (ou renvoie) 1277155717 qui représente 1969.La fonction de temps en php et 1969

Je me demandais s'il existait un moyen de sauvegarder l'heure dans la base de données de façon à ce qu'elle représente la date actuelle à ce moment.

J'utilise la fonction

/* Works out the time since the entry post, takes a an argument in unix time (seconds) */ 
function time_since($original) { 
    // array of time period chunks 
    $chunks = array(
     array(60 * 60 * 24 * 365 , 'year'), 
     array(60 * 60 * 24 * 30 , 'month'), 
     array(60 * 60 * 24 * 7, 'week'), 
     array(60 * 60 * 24 , 'day'), 
     array(60 * 60 , 'hour'), 
     array(60 , 'minute'), 
    ); 

    $today = time(); /* Current unix time */ 
    $since = $today - $original; 

    // $j saves performing the count function each time around the loop 
    for ($i = 0, $j = count($chunks); $i < $j; $i++) { 

     $seconds = $chunks[$i][0]; 
     $name = $chunks[$i][1]; 

     // finding the biggest chunk (if the chunk fits, break) 
     if (($count = floor($since/$seconds)) != 0) { 
      // DEBUG print "<!-- It's $name -->\n"; 
      break; 
     } 
    } 

    $print = ($count == 1) ? '1 '.$name : "$count {$name}s"; 

    if ($i + 1 < $j) { 
     // now getting the second item 
     $seconds2 = $chunks[$i + 1][0]; 
     $name2 = $chunks[$i + 1][1]; 

     // add second item if it's greater than 0 
     if (($count2 = floor(($since - ($seconds * $count))/$seconds2)) != 0) { 
      $print .= ($count2 == 1) ? ', 1 '.$name2 : ", $count2 {$name2}s"; 
     } 
    } 
    return $print; 
} 

Pour afficher le nombre de minutes, années, mois, etc depuis le commentaire a été publié et il est de retour (40 ans, il y a 6 mois) quand je passe la valeur de la fonction time();

+1

L'horodateur '1277155717' est' lundi, 21 juin 2010, 21:28:37 (GMT) ' – vimist

+0

ouais, alors quel est le problème avec la fonction ci-dessus (merci de vérifier ce btw) – user220755

+0

ce qui vous fait couler' 1277155717 »est quelque temps en 1969? – jigfox

Répondre

1

Pourquoi ne vous suffit d'utiliser le type de sql timestamp, à savoir

INSERT INTO posts (content, created) VALUES ("Sample post", NOW()); 
+0

Je voudrais pouvoir utiliser la fonction php (time()). Cependant, il retourne 1277155717, ce qui n'est pas le nombre qu'il devrait retourner pour l'heure actuelle. Je suis assez sûr que la fonction ci-dessus est correcte, donc il ne devrait pas dire 40 ans 6 mois – user220755

+1

C'est "le vrai nombre, il devrait être de retour pour l'heure actuelle". Vérifiez sur http://www.unixtimestamp.com/ l'horodatage actuel. – cypher

+0

alors pouvez-vous m'aider à vérifier ce qui ne va pas avec la fonction ci-dessus s'il vous plaît :)? – user220755

0

Voulez-vous un horodatage ou l'heure formatée?

Si c'est celui-ci, essayez ceci:

$time = date("h:i:s"); 
+0

timestamp pas l'heure formatée – user220755

0

Soyez très prudent avant de commencer à mettre en œuvre vos propres calculs de date. Il y a toujours des cas étranges à traiter. Dans votre exemple, il me semble que vous ne tenez pas compte de l'heure d'été ou des années bissextiles. Je ne sais pas si cela compte pour vous.

Vos chances sont meilleures si vous utilisez une bibliothèque pour effectuer les calculs de date pour vous. Je vous suggère de commencer par regarder le date_diff function en PHP. Je ne sais pas s'il gère l'heure d'été et les années bissextiles, mais c'est là que je commencerais.