Frage

Ich habe ein paar Probleme mit der mktime Funktion. Auf meinem Produktions-Server, wenn ich führen Sie das folgende:

echo '<p>' . mktime(24, 0,0, 8,29,2009) . ' - 12pm</p>';
echo '<p>' . mktime(23, 0,0, 8,29,2009) . ' - 11pm</p>';
echo '<p>' . mktime(22, 0,0, 8,29,2009) . ' - 10pm</p>';

Und dann diese Zeitstempel konvertieren zurück zu lesbarem Format (unter Verwendung von www.unixtimestamp.com für die schnelle Konvertierung), die Zeiten sind alle um eine Stunde ab. Ursprünglich dachte ich, das ein Problem mit 2400 VS 0000 war, aber das wäre Konto nicht für die anderen Termine sind aus.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Der Server verfügt über eine andere Zeitzone, als Sie erwarten. Unix-Zeitstempel in Sekunden gemessen seit 00.00.00 1.1.1970 GMT , so haben Sie eine versteckte Zeitzone Umwandlung in Ihrem Code. Sie können entweder

Andere Tipps

Ich lief die folgende von der Kommandozeile und bekam die folgende (erwarteten) ausgegeben. Was passiert, wenn man sie laufen?

$ php -r "echo date('H:i:s Y-m-d', mktime(24, 0, 0, 8, 29, 2009));"
00:00:00 2009-08-30

$ php -r "echo date('H:i:s Y-m-d', mktime(23, 0, 0, 8, 29, 2009));"
23:00:00 2009-08-29

$ php -r "echo date('H:i:s Y-m-d', mktime(22, 0, 0, 8, 29, 2009));"
22:00:00 2009-08-29

Mein Problem war, dass in mktime I-Eingang Tag und Monat mit führenden Nullen . Als die Funktion zurückgegeben mich zu falschen Ergebnissen. Eine Möglichkeit wäre, die führende Null mit einer Funktion wie

entfernen
$str = ltrim($str, '0');

Quelle: Wie alle führenden Nullen in einer Zeichenkette entfernen

oder

$var = (int)$var;

Quelle: PHP entfernen erste Nullen

Ich habe eine Möglichkeit von soulmerge:

$date = new DateTime($year . '-' . $month . '-' . $day . ' ' . $hour . ':' . $minute . ':' . $seconds);
$match_time = $date->getTimestamp();

Aber die Zeitzone sollte immer eingestellt werden (entweder mit date_default_timezone_set() oder direkt mit DateTime .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top