Frage

Ich habe Termine in folgendem Format (yyyymmdd, 18751104, 19140722) ... Was ist der einfachste Weg, um es auf dem neuesten Stand zu konvertieren () .... oder verwendet mktime () und Teil meiner beste Option ...?

War es hilfreich?

Lösung

Verwenden Sie strtotime() eine Zeichenfolge konvertieren ein Datum in ein mit < a href = "http://en.wikipedia.org/wiki/Unix_time" rel = "noreferrer"> Unix-Zeitstempel :

<?php
// both lines output 813470400
echo strtotime("19951012"), "\n",
     strtotime("12 October 1995");
?>

Sie können das Ergebnis als zweiten Parameter übergeben zu date() formatieren Sie das Datum selbst:

<?php
// prints 1995 Oct 12
echo date("Y M d", strtotime("19951012"));
?>

Hinweis

strtotime() wird zu Beginn des Jahres 1970 mit Datumsangaben vor dem Unix-Epoche scheitern.

Als Alternative, die mit Daten vor 1970 arbeiten:

<?php
// Returns the year as an offset since 1900, negative for years before
$parts = strptime("18951012", "%Y%m%d");
$year = $parts['tm_year'] + 1900; // 1895
$day = $parts['tm_mday']; // 12
$month = $parts['tm_mon']; // 10
?>

Andere Tipps

Persönlich würde ich substr nur (), weil es ist wahrscheinlich der leichteste Weg, es trotzdem zu tun.

Aber hier ist eine Funktion, die ein Datum nimmt, von dem Sie das Format festlegen können. Es gibt ein assoziatives Array, so dass Sie beispielsweise tun könnten (nicht getestet):

$parsed_date = date_parse_from_format('Ymd', $date);
$timestamp = mktime($parsed_date['year'], $parsed_date['month'], $parsed_date['day']);

http://uk.php.net/ manual / en / function.date-Parsing-from-format.php

Obwohl ich sagen muss, finde ich nicht, dass nicht leichter oder effektiver als einfach:

mktime(substr($date, 0, 4), substr($date, 4, 2), substr($date, 6, 2));

haben einen Blick auf strptime

Nun Dank für alle Antworten, aber das 1900 Problem scheint jede Antwort, die ich bekam plagen. Hier ist eine Kopie der Funktion verwende ich sollte jemand es sinnvoll, für sie in der Zukunft finden.

public static function nice_date($d){
    $ms = array(
           'January',
           'February',
           'March',
           'April',
           'May',
           'June',
           'July',
           'August',
           'September',
           'October',
           'November',
           'December'
    );

    $the_return = '';
    $the_month = abs(substr($d,4,2));
    if ($the_month != 0) {
        $the_return .= $ms[$the_month-1];
    }

    $the_day = abs(substr($d,6,2));
    if ($the_day != 0){
        $the_return .= ' '.$the_day;
    }

    $the_year = substr($d,0,4);
    if ($the_year != 0){
        if ($the_return != '') {
            $the_return .= ', ';
        }
        $the_return .= $the_year;
    }

    return $the_return;
}

(PHP 5> = 5.3.0, PHP 7):

Sie können eine Datetime-Instanz erhalten mit:

$dateTime = \DateTime::createFromFormat('Ymd|', '18951012');

und wandeln es in einem Zeitstempel:

$timestamp = $dateTime->getTimestamp();
// -> -2342217600
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top