Question

Je suis à la recherche d'une fonction identique à DateTime :: createFromFormat mais j'ai besoin pour travailler dans un environnement exécutant une version de PHP qui est plus ancienne que v5.3. Fondamentalement, je dois fournir un format, comme vous utiliseriez avec le Date () fonction, et je dois ensuite analyser / valider une chaîne contre ce format, et retourner un horodatage si la chaîne est correctement formaté et une date valide.

Quelqu'un sait où je peux trouver quelque chose comme ça, ou dois-je l'écrire moi-même?

Encore une fois, cela doit travailler avec un format spécifique, fourni comme argument. Le format pourrait être quelque chose, donc il n'y a aucune garantie que je peux utiliser strtotime () .

Était-ce utile?

La solution

DateTime::createFromFormat et date_parse_from_format ont été ajoutés en PHP 5.3 parce qu'il y avait une forte demande pour cette fonctionnalité, en particulier de developpeurs qui Code pour les utilisateurs qui ne sont pas des États-Unis utilisent des formats de date / heure.


Avant de ceux-ci, il fallait développer une fonction spécifique pour analyser le format que vous utilisiez; avec PHP <5.3, ce qui est fait est généralement:

  • décider quel format sera accepté par l'application
  • Afficher un certain message disant quelque chose comme "votre entrée doit être JJ / MM / AAAA" (français pour JJ / MM / AAAA)
  • Vérifiez que l'entrée est OK, en ce qui concerne à ce format
  • Et l'analyser pour le convertir à une date / heure que PHP peut comprendre.

Ce qui signifie que les applications et généralement developpeurs ne permettaient pas que de nombreux formats, comme chaque format différent signifie validation + fonction additionnelle analyse syntaxique.


Si vous avez vraiment besoin de ce genre de fonction, qui permet de tout format possible, je vous ai bien peur genre d'avoir à écrire vous-même: - (

peut-être prendre un regard sur les sources de date_parse_from_format pourraient aider, si vous comprenez le code C? Il devrait être quelque chose comme ext/date/php_date.c - mais ne semble pas être aussi simple que cela: il est d'appeler la fonction timelib_parse_from_format, qui est défini dans ext/data/lib/parse_date.c, et ne semble pas sympathique ^^

Autres conseils

Vous pouvez utiliser la classe Zend_Date de Zend Framework: http: // cadre. zend.com/manual/en/zend.date.html

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

Vous pouvez utiliser strptime() - il utilise format de strftime(). Un peu différent par rapport au format date() mais fait presque les mêmes choses.

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);
}

Pour la version PHP 5.3 avant que j'utiliser cette fonction ci-dessous pour obtenir DateTime chaînes de forme d'objets formated comme 'DD.MM.YYYY'.

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;
}
  • Tout d'abord valider si l'entrée est correcte.
  • Puis extraire mois, le jour et l'année
  • Utilisez checkdate pour valider la date.
  • Convertir à horodater et le transmettre à contructor de DateTime et le retourner.

Vous pouvez créer un timestamp puis l'exécuter par jour .. pour créer le timestamp vous pouvez faire quelques explode sur la chaîne que vous obtenez ..

$tomorrow = mktime(0,0,0,date("m"),date("d")+1,date("Y"));
echo "Tomorrow is ".date("Y/m/d", $tomorrow);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top