2009-12-06 9 views
8

Est-ce que quelqu'un connaissait un moyen d'obtenir une chaîne de date qui contient le format de la date?Obtenir le format de date comme "Y-m-d H: i: s" à partir d'une date php

<?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, d'habitude pour obtenir ce jour avec un autre fuseau horaire du 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 expressions régulières pour des raisons de performances, mais je ne sais pas si cela est possible

Répondre

4

Pour autant que je sache, il n'y a aucune garantie de fonctionnement à rebours. Le meilleur moyen pourrait être d'essayer de faire correspondre les expressions régulières avec les formats connus bien connus (par exemple \d{2,4}[-/]\d{2}[-/]\d{2} pour "Y-m-d") mais je ne peux pas trouver un moyen facile de faire la correspondance sans utiliser d'expressions régulières. Vous devrez également vérifier que le format analysé est logique, et vous ne pouvez pas faire beaucoup de choses sur les dates ambiguës comme le 2 mars 2009, qui pourrait être représenté comme 09/03/02, 2009-03-02, 02/03/09, 03/02/09, ou même 09/02/03.

+1

La seule personne qui a réellement compris la question de l'OP! –

9

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

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

Il me semble que il veut travailler à rebours à partir d'une date à son format. (c'est-à-dire de "2009-10-16" à "Y-m-d") – DMI

+0

Mon erreur - J'ai copié le code trop vite - maintenant c'est ok. – hsz

3

La fonction PHP date() formate un horodatage à une date et une heure plus lisibles. 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'); 
    ?> 
3

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

$date = date("Y-m-d");