Question

Quelqu'un sait un moyen d'obtenir une chaîne à partir d'une date qui contient le format de la date?

<?php
    $date = date ("2009-10-16 21:30:45");

    // smething like this?
    print date_format ($date);
?>

Je demande parce que je voudrais optimiser cette fonction, je l'ai écrit, le plus souvent pour obtenir la date avec un fuseau horaire différent à partir d'un serveur, sans faire des choses particulières

<?php
function get_timezone_offset ($timezone, $date = null, $format = null, $offset_timezone = null) {
    if ($date == null) $date = date ($format);
    if ($offset_timezone == null) $offset_timezone = date_default_timezone_get ();
    if ($format == null) $format = "Y-m-d H:i:s";
    // I'd like to find a way that can avoid me to write $format and get it directly from the date i pass, but I don't know a particular method can do it
    // if ($format == null) $format = date_format ($date);

    $date_time = new DateTime ($date, new DateTimeZone ($offset_timezone));
    $date_time->setTimeZone (new DateTimeZone ($timezone));
    return $date_time->format ($format);
}

print get_timezone_offset ("Europe/Rome");
print get_timezone_offset ("Europe/Rome", date ("Y-m-d H:i:s"));
print get_timezone_offset ("Europe/Rome", date ("Y-m-d H:i:s"), "Y-m-d H:i:s");
print get_timezone_offset ("Europe/Rome", "2009-10-16 21:30:45", "Y-m-d H:i:s", "America/New_York");
?>

J'espère éviter des expressions régulières pour des raisons de performance, mais je ne sais pas si cela est possible

Était-ce utile?

La solution

Pour autant que je sache, il n'y a pas de moyen sûr de travailler en arrière. La meilleure façon peut-être d'essayer de faire correspondre les expressions régulières contre des formats bien connus attendus (par exemple \d{2,4}[-/]\d{2}[-/]\d{2} pour « Y-m-d ») mais je ne peux pas penser à un moyen facile de faire la correspondance sans utiliser des expressions régulières. Vous devez également vérifier que le format analysable est logique, et vous ne pouvez pas faire grand-chose sur les dates ambiguës comme 2ème de Mars 2009, ce qui pourrait être représenté comme 09/03/02, 2009-03-02, 02/03/09, 03/02/09, ou même 09/02/03.

Autres conseils

Vous pouvez convertir la date de chaîne en timestamp avec strtotime et faire avec l'horodatage ce que vous voulez. ;)

<?php
$date = "2009-10-16 21:30:45";
$ts   = strtotime($date);
echo date('Y-m-d', $ts);
?>

La fonction PHP date () formate un horodatage à une date plus lisible et le temps. Essayez ce code à votre projet,

 <?php
    $date=date_create('2014-10-20');
    date_time_set($date,12,20,55);
    echo date_format($date,'Y-m-d H:i:s');
    ?>

Je sais qu'il est tard, mais serait-il préférable de le faire:

$date = date("Y-m-d");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top