web-dev-qa-db-fra.com

Convertir la chaîne en date en PHP

Comment puis-je convertir cette chaîne 05/Feb/2010:14:00:01 en unixtime? 

13
streetparade

Pour PHP 5.3, cela devrait fonctionner. Vous devrez peut-être jouer avec $ dateInfo ['is_dst'], de toute façon ne fonctionnait pas pour moi.

$date = '05/Feb/2010:14:00:01';
$dateInfo = date_parse_from_format('d/M/Y:H:i:s', $date);
$unixTimestamp = mktime(
    $dateInfo['hour'], $dateInfo['minute'], $dateInfo['second'],
    $dateInfo['month'], $dateInfo['day'], $dateInfo['year'],
    $dateInfo['is_dst']
);

Les versions antérieures, cela devrait fonctionner.

$date = '05/Feb/2010:14:00:01';
$format = '@^(?P<day>\d{2})/(?P<month>[A-Z][a-z]{2})/(?P<year>\d{4}):(?P<hour>\d{2}):(?P<minute>\d{2}):(?P<second>\d{2})$@';
preg_match($format, $date, $dateInfo);
$unixTimestamp = mktime(
    $dateInfo['hour'], $dateInfo['minute'], $dateInfo['second'],
    date('n', strtotime($dateInfo['month'])), $dateInfo['day'], $dateInfo['year'],
    date('I')
);

Vous n'aimerez peut-être pas les expressions régulières. Vous pouvez bien sûr l'annoter, mais tout le monde ne l'aime pas non plus. Donc, ceci est une alternative.

$day = $date[0].$date[1];
$month = date('n', strtotime($date[3].$date[4].$date[5]));
$year = $date[7].$date[8].$date[9].$date[10];
$hour = $date[12].$date[13];
$minute = $date[15].$date[16];
$second = $date[18].$date[19];

Ou substr, ou exploser, tout ce que vous souhaitez analyser cette chaîne.

20
erisco

Utilisez la fonction strtotime:

Exemple:

 $date = "25 december 2009";
 $my_date = date('m/d/y', strtotime($date));
 echo $my_date;
52
Sarfraz

Vous devriez regarder dans la fonction strtotime () .

4
Johannes Gorset
4
Vladislav Rastrusny
$d="05/Feb/2010:14:00:01";
$dr= date_create_from_format('d/M/Y:H:i:s', $d);
echo $dr->format('Y-m-d H:i:s');

ici vous obtenez la chaîne de date, donnez le spécificateur de format dans -> format () en fonction du format souhaité

2
Dashrath

Une simple explosion devrait faire l'affaire:

$monthNamesToInt = array('Jan'=>1,'Feb'=>2, 'Mar'=>3 /*, [...]*/ );
$datetime = '05/Feb/2010:14:00:01';
list($date,$hour,$minute,$second) = explode(':',$datetime);
list($day,$month,$year) = explode('/',$date);

$unixtime = mktime((int)$hour, (int)$minute, (int)$second, $monthNamesToInt[$month], (int)$day, (int)$year);
1
dev-null-dweller

Essaye ça:

$new_date=date('d-m-Y', strtotime($date));
0
enor

Si vous le souhaitez, utilisez le DateTime class

0
axsuul

Si c'est une chaîne en laquelle vous avez confiance, ce qui signifie que vous l'avez déjà vérifiée, les opérations suivantes fonctionneraient également.

$date = new DateTime('2015-03-27');
0
Rick