380 Stimmen

Wie konvertiert man in PHP ein Datum in einen Zeitstempel?

Wie erhalte ich den Zeitstempel von z.B. 22-09-2008 ?

649voto

Owen Punkte 79611

Diese Methode funktioniert bei beide Windows und Unix et es Zeitzone bewusst, was Sie wahrscheinlich wollen, wenn Sie mit Daten .

Wenn Ihnen die Zeitzone egal ist oder Sie die Zeitzone verwenden möchten, die Ihr Server verwendet:

$d = DateTime::createFromFormat('d-m-Y H:i:s', '22-09-2008 00:00:00');
if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

1222093324 (Dies hängt von der Zeitzone Ihres Servers ab...)

Wenn Sie angeben möchten, in welcher Zeitzone, hier EST. (Dasselbe wie New York.)

$d = DateTime::createFromFormat(
    'd-m-Y H:i:s',
    '22-09-2008 00:00:00',
    new DateTimeZone('EST')
);

if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

1222093305

Oder wenn Sie Folgendes verwenden möchten UTC . (Dasselbe wie " GMT ".)

$d = DateTime::createFromFormat(
    'd-m-Y H:i:s',
    '22-09-2008 00:00:00',
    new DateTimeZone('UTC')
);

if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

1222093289

Unabhängig davon ist es immer eine gute

134voto

Gordon Punkte 304254

Mit DateTime API :

$dateTime = new DateTime('2008-09-22'); 
echo $dateTime->format('U'); 

// or 

$date = new DateTime('2008-09-22');
echo $date->getTimestamp();

Dasselbe gilt für die prozedurale API:

$date = date_create('2008-09-22');
echo date_format($date, 'U');

// or

$date = date_create('2008-09-22');
echo date_timestamp_get($date);

Wenn der obige Versuch fehlschlägt, weil Sie eine nicht unterstütztes Format können Sie verwenden

$date = DateTime::createFromFormat('!d-m-Y', '22-09-2008');
echo $dateTime->format('U'); 

// or

$date = date_parse_from_format('!d-m-Y', '22-09-2008');
echo date_format($date, 'U');

Beachten Sie, dass Sie, wenn Sie nicht die Option ! wird der Zeitanteil auf die aktuelle Zeit gesetzt, anders als bei den ersten vier, die Mitternacht verwenden, wenn Sie die Zeit weglassen.

Eine weitere Alternative ist die Verwendung der IntlDateFormatter API:

$formatter = new IntlDateFormatter(
    'en_US',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'GMT',
    IntlDateFormatter::GREGORIAN,
    'dd-MM-yyyy'
);
echo $formatter->parse('22-09-2008');

Sofern Sie nicht mit lokalisierten Datumszeichenfolgen arbeiten, ist die einfachere Wahl wahrscheinlich DateTime.

116voto

daremon Punkte 4866

Seien Sie vorsichtig mit Funktionen wie strtotime() die versuchen zu "erraten", was Sie meinen (es wird natürlich nicht erraten, die Regeln sind hier ).

In der Tat 22-09-2008 wird geparst als 22. September 2008 denn das ist das einzig Vernünftige.

Wie wird 08-09-2008 geparst werden? Wahrscheinlich 09. August 2008 .

Was ist mit 2008-09-50 ? Einige PHP-Versionen interpretieren dies als 20. Oktober 2008 .

Wenn Sie also sicher sind, dass Ihr Beitrag in DD-MM-YYYY Format, ist es besser, die Lösung zu verwenden, die von @Armin Ronacher .

64voto

Prof. Falken Punkte 23108

Diese Methode funktioniert bei beide Windows und Unix et es Zeitzone bewusst, was Sie wahrscheinlich wollen, wenn Sie mit Daten .

Wenn Ihnen die Zeitzone egal ist oder Sie die Zeitzone verwenden möchten, die Ihr Server verwendet:

$d = DateTime::createFromFormat('d-m-Y H:i:s', '22-09-2008 00:00:00');
if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

1222093324 (Dies hängt von der Zeitzone Ihres Servers ab...)

Wenn Sie angeben möchten, in welcher Zeitzone, hier EST. (Dasselbe wie New York.)

$d = DateTime::createFromFormat(
    'd-m-Y H:i:s',
    '22-09-2008 00:00:00',
    new DateTimeZone('EST')
);

if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

1222093305

Oder wenn Sie Folgendes verwenden möchten UTC . (Dasselbe wie " GMT ".)

$d = DateTime::createFromFormat(
    'd-m-Y H:i:s',
    '22-09-2008 00:00:00',
    new DateTimeZone('UTC')
);

if ($d === false) {
    die("Incorrect date string");
} else {
    echo $d->getTimestamp();
}

1222093289

Unabhängig davon ist es immer ein guter Ausgangspunkt, beim Parsen von Zeichenketten in strukturierte Daten streng zu sein. Das kann in der Zukunft unangenehme Fehlersuche ersparen. Daher empfehle ich, immer das Datumsformat anzugeben.

45voto

Till Punkte 21912

Verwendung von mktime :

list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X