2012-09-05 10 views
2

J'ai un code mais je ne trouve pas d'erreur. J'ai un événement à venir et l'heure actuelle. Si je convertis mon événement à l'horodatage, c'est moins que l'horodatage actuel. Peut-être que tu peux m'aider.Horodatage PHP Unix

Mon code ci-dessous:

<?php 

date_default_timezone_set('Etc/GMT'); 

$upcoming  = "2012.09.05 23:50"; 
$current  = time(); 

echo "Upcoming: " . $upcoming . " | Timestamp:" . mktime(23, 50, 0, 09, 05, intval(date("Y"))); 
echo "<br>Current: " . time(); 
echo "<br>Current SIM: " . mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y")); 


?> 

Affichera:

Upcoming: 2012.09.05 23:50 | Timestamp:1323129000 
Current: 1346855221 
Current SIM: 1346855220 

Où en cours> timestamp à venir. (???) Merci!

+0

Oui. Cette chaîne: date_default_timezone_set ('Etc/GMT'); – user889349

Répondre

7

Parce que vous avez 09 (avec un précédent 0) ce nombre est interprété comme un nombre octal, et il est donc converti à 0. Utilisation: mktime(23, 50, 0, 9, 5, intval(date("Y")));

Vous pouvez explorer cette « fonctionnalité » un peu;

var_dump(9); // int 9 
var_dump(09); // int 0 
var_dump(07); // int 7 
var_dump(17); // int 17 
var_dump(017); // int 15 

EDIT;

date('n'); renvoie le mois sans les zéros en tête. Et date('j'); et date('G'); renvoient le jour et l'heure sans les zéros en tête. Ainsi, vous pouvez changer mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y")); à mktime(date("G"), date("i"), date("s"), date("n"), date("j"), date("Y"));

Il n'y a pas moyen d'obtenir le nombre de minutes et secondes sans zéro avec date() alors peut-être vous avez besoin de trouver une autre fonction pour cela.

EDIT:

Pour convertir 2012.09.05 23:50 à un horodatage, vous pouvez changer le . à / et nourrir à strtotime():

$str = '2012.09.05 23:50'; 
$str = str_replace(".", "/", $str); 
$timestamp = strtotime($str); 
+0

Alors, comment puis-je convertir 09 à 9? – user889349

+0

intval (09) return 0; – user889349

+0

Vous avez le code en couleur dans votre code, vous pouvez donc simplement changer le code. En outre; 'date ('n');' renvoie le mois sans zéros de tête. Et 'date ('j');' renvoie le jour sans zéros en tête –

0

Laissez loin les zéros inutiles, qui devrait faire l'affaire.

mktime (23, 50, 0, 9, 5, intval (date ("Y")));

Questions connexes