Frage

Ich bin auf der Suche nach einer Funktion identisch mit Datetime :: createFromFormat , aber ich brauche es in einer Umgebung zu arbeiten, eine Version von PHP ausgeführt wird, die älter als v5.3 ist. Grundsätzlich muß ich ein Format zur Verfügung zu stellen, wie Sie mit dem Datum verwenden würden () Funktion, und ich dann müssen Parse / validieren einer Schnur gegen das Format, und gebe einen Zeitstempel, wenn die Zeichenfolge richtig formatiert ist und ein gültiges Datum.

Wer weiß, wo ich so etwas finden kann, oder muss ich es selbst schreiben?

Auch dies hat zur Arbeit mit einem bestimmten Format als Argument zur Verfügung gestellt. Das Format könnte alles sein, so gibt es keine Garantie, dass ich nur verwenden kann strtotime () .

War es hilfreich?

Lösung

DateTime::createFromFormat und date_parse_from_format wurde in PHP 5.3 hinzugefügt, weil es eine hohe Nachfrage für diese Funktion war, vor allem von Entwicklern, die Code für Benutzer, die US-Datum / Zeit-Formate nicht verwenden.


Vor denen, mußte man eine bestimmte Funktion entwickeln, um das Format zu analysieren Sie wurden verwendet; mit PHP <5.3, was in der Regel geschieht, ist:

    Entscheiden
  • , welches Format wird von der Anwendung akzeptiert werden
  • Anzeige eine Botschaft etwas zu sagen wie "Ihre Eingabe sollte JJ / MM / AAAA sein" (Französisch für DD / MM / YYYY)
  • Überprüfen Sie, dass der Eingang in Ordnung ist, in Bezug auf die auf dieses Format
  • Und analysieren sie es zu einem Datum / Zeit zu konvertieren, dass PHP verstehen kann.

Welche Mittel Anwendungen und developpers im Allgemeinen nicht für so viele Formate zuließ, da jedes Format eine unterschiedliche zusaetzliche Validierung + Parsing Funktion gemeint.


Wenn Sie wirklich diese Art von Funktion benötigen, die für jedes mögliche Format ermöglicht es, ich fürchte, Sie werden Art, es selbst zu schreiben: - (

Vielleicht einen Blick auf den Quellen von date_parse_from_format nehmen könnte helfen, wenn Sie C-Code zu verstehen? Es sollte wie ext/date/php_date.c in etwas zu sein - aber scheint nicht so einfach zu sein: es die timelib_parse_from_format Funktion ruft, die in ext/data/lib/parse_date.c definiert ist, und sieht nicht so freundlich ^^

Andere Tipps

Sie können die Zend_Date Klasse von Zend Framework verwenden: http: // Rahmen. zend.com/manual/en/zend.date.html

$date = new Zend_Date($string, $format);
$timestamp = $date->get();

Sie können verwenden strptime() - es ist mit strftime() Format. Ein bisschen anders im Vergleich zu date() Format aber macht fast die gleichen Dinge.

function createFromFormat($strptimeFormat, $date) {
    $date = strptime($date, $strptimeFormat);
    $date['tm_year'] += 1900;
    $date['tm_mon']++;
    $timestamp = mktime($date['tm_hour'], $date['tm_min'], $date['tm_sec'], $date['tm_mon'], $date['tm_mday'], $date['tm_year']);
    return new DateTime('@'. $timestamp);
}

Für PHP-Version vor 5.3 verwende ich diese Funktion unten zu bekommen Datetime Objektform Strings als 'DD.MM.YYYY' formated.

function ParseForDateTimeValue ($strText)
{
    if ($strText != "")
    {
        if (ereg("^([0-9]{1,2})[/\.]\s*([0-9]{1,2})[/\.]\s*([0-9]{2,4})$",$strText,$arr_parts)) {

            $month = ltrim($arr_parts[2], '0');
            $day = ltrim($arr_parts[1], '0');
            $year = $arr_parts[3];

            if (checkdate($month, $day, $year)) {
               return new DateTime(date('Y-m-d H:i:s', mktime(0, 0, 0, $month, $day, $year));
            }
        }
    }
    return NULL;
}
  • Erste Validate, wenn der Eingang korrekt ist.
  • Dann Extrakt Monat, Tag und Jahr
  • Verwenden Sie checkdate das Datum zu überprüfen.
  • es Zeitstempel konvertieren und es zu contructor von Datetime übergeben und es zurück.

Sie können eine timestamp erstellen und diese dann über Datum laufen .., um die timestamp erstellen Sie einige explode Sie .. bekommen auf der Saite tun

$tomorrow = mktime(0,0,0,date("m"),date("d")+1,date("Y"));
echo "Tomorrow is ".date("Y/m/d", $tomorrow);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top