web-dev-qa-db-fra.com

Comment convertir une date en timestamp en PHP?

Comment obtenir l'horodatage, par exemple 22-09-2008?

308
Wizard4U

_ strtotime() de PHP donne

$timestamp = strtotime('22-09-2008');

Qui fonctionne avec les formats Date et heure pris en charge Docs .

568
Owen

Il y a aussi strptime() qui attend exactement un format:

$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900);
180
Armin Ronacher

Avec DateTime API :

$dateTime = new DateTime('2008-09-22'); 
echo $dateTime->format('U'); 

// or 

$date = new DateTime('2008-09-22');
echo $date->getTimestamp();

La même chose avec l'API procédurale:

$date = date_create('2008-09-22');
echo date_format($date, 'U');

// or

$date = date_create('2008-09-22');
echo date_timestamp_get($date);

Si ceci échoue parce que vous utilisez un format non supporté , vous pouvez utiliser

$date = DateTime::createFromFormat('!d-m-Y', '22-09-2008');
echo $dateTime->format('U'); 

// or

$date = date_parse_from_format('!d-m-Y', '22-09-2008');
echo date_format($date, 'U');

Notez que si vous ne définissez pas le !, la partie heure sera définie sur l'heure actuelle, ce qui est différent des quatre premiers qui utilisent minuit lorsque vous omettez l'heure.

Une autre alternative consiste à utiliser l'API IntlDateFormatter :

$formatter = new IntlDateFormatter(
    'en_US',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'GMT',
    IntlDateFormatter::GREGORIAN,
    'dd-MM-yyyy'
);
echo $formatter->parse('22-09-2008');

Sauf si vous travaillez avec des chaînes de date localisées, le choix le plus facile est probablement DateTime.

120
Gordon

Soyez prudent avec les fonctions telles que strtotime() qui essaient de "deviner" ce que vous voulez dire (cela n’est pas évident, les règles sont ici ).

En effet, 22-09-2008 sera analysé comme _ {22 septembre 2008} _, car c'est la seule chose raisonnable. 

Comment 08-09-2008 sera-t-il analysé? Probablement 09 août 2008

Qu'en est-il de 2008-09-50? Certaines versions de PHP analysent ceci comme 20 octobre 2008.

Ainsi, si vous êtes sûr que votre saisie est au format DD-MM-YYYY, il est préférable d’utiliser la solution proposée par @Armin Ronacher .

114
daremon


Si vous avez PHP 5.3 ou supérieur,

cette méthode fonctionne à la fois sur les deux Windows et Unix et est le fuseau horaire aware, ce qui est probablement ce que vous voulez si vous voulez vraiment travailler avec des dates.

Si vous ne vous souciez pas du fuseau horaire ou si vous souhaitez utiliser le fuseau horaire de votre serveur:

$d = DateTime::createFromFormat('d-m-Y', '22-09-2008');
echo $d->getTimestamp();

1222093324  (Cela dépendra du fuseau horaire de votre serveur ...)


Si vous voulez spécifier dans quel fuseau horaire, ici EST. (Identique à New York.)

$d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('EST'));
echo $d->getTimestamp();

1222093305


Ou si vous voulez utiliser UTC. (Identique à "GMT".)

$d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('UTC'));
echo $d->getTimestamp();

1222093289


47
Prof. Falken

Utiliser mktime :

list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
43
Till

En utilisant la fonction strtotime (), vous pouvez facilement convertir la date en horodatage 

<?php
// set default timezone
date_default_timezone_set('America/Los_Angeles');

//define date and time
$date = date("d M Y H:i:s");

// output
echo strtotime($date);
?> 

Plus d'infos: http://php.net/manual/en/function.strtotime.php

Outil de conversion en ligne: http://freeonlinetools24.com/

17
klit67

Voici une solution très simple et efficace utilisant les fonctions split et mtime:

$date="30/07/2010 13:24"; //Date example
list($day, $month, $year, $hour, $minute) = split('[/ :]', $date); 

//The variables should be arranged according to your date format and so the separators
$timestamp = mktime($hour, $minute, 0, $month, $day, $year);
echo date("r", $timestamp);

Cela a fonctionné comme un charme pour moi.

13
Victor Bojica

Étant donné que la fonction strptime() ne fonctionne pas pour Windows et que strtotime() peut renvoyer des résultats inattendus, je recommande d'utiliser date_parse_from_format():

$date = date_parse_from_format('d-m-Y', '22-09-2008');
$timestamp = mktime(0, 0, 0, $date['month'], $date['day'], $date['year']);
7
Victor

Si vous voulez savoir avec certitude si une date est analysée dans quelque chose que vous attendez, vous pouvez utiliser DateTime::createFromFormat():

$d = DateTime::createFromFormat('d-m-Y', '22-09-2008');
if ($d === false) {
    die("Woah, that date doesn't look right!");
}
echo $d->format('Y-m-d'), PHP_EOL;
// prints 2008-09-22

C'est évident dans ce cas, mais par exemple 03-04-2008 pourrait être le 3 avril ou le 4 mars, selon votre pays d'origine :)

6
Ja͢ck
<?php echo date('M j Y g:i A', strtotime('2013-11-15 13:01:02')); ?>

http://php.net/manual/en/function.date.php

5
Michael Chambers

Si vous connaissez le format, utilisez strptime car strtotime devine le format, qui peut ne pas toujours être correct. Puisque strptime n’est pas implémenté dans Windows, il existe une fonction personnalisée.

Rappelez-vous que la valeur de retour tm_year date de 1900! et tm_month est 0-11

Exemple:

$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900)
5
blavla
$time = '22-09-2008';
echo strtotime($time);
5
Praveen Srinivasan
function date_to_stamp( $date, $slash_time = true, $timezone = 'Europe/London', $expression = "#^\d{2}([^\d]*)\d{2}([^\d]*)\d{4}$#is" ) {
    $return = false;
    $_timezone = date_default_timezone_get();
    date_default_timezone_set( $timezone );
    if( preg_match( $expression, $date, $matches ) )
        $return = date( "Y-m-d " . ( $slash_time ? '00:00:00' : "h:i:s" ), strtotime( str_replace( array($matches[1], $matches[2]), '-', $date ) . ' ' . date("h:i:s") ) );
    date_default_timezone_set( $_timezone );
    return $return;
}

// expression may need changing in relation to timezone
echo date_to_stamp('19/03/1986', false) . '<br />';
echo date_to_stamp('19**03**1986', false) . '<br />';
echo date_to_stamp('19.03.1986') . '<br />';
echo date_to_stamp('19.03.1986', false, 'Asia/Aden') . '<br />';
echo date('Y-m-d h:i:s') . '<br />';

//1986-03-19 02:37:30
//1986-03-19 02:37:30
//1986-03-19 00:00:00
//1986-03-19 05:37:30
//2012-02-12 02:37:30
4
Phil Jackson

Voici comment je le ferais:

function dateToTimestamp($date, $format, $timezone='Europe/Belgrade')
{
    //returns an array containing day start and day end timestamps
    $old_timezone=date_timezone_get();
    date_default_timezone_set($timezone);
    $date=strptime($date,$format);
    $day_start=mktime(0,0,0,++$date['tm_mon'],++$date['tm_mday'],($date['tm_year']+1900));
    $day_end=$day_start+(60*60*24);
    date_default_timezone_set($old_timezone);
    return array('day_start'=>$day_start, 'day_end'=>$day_end);
}

$timestamps=dateToTimestamp('15.02.1991.', '%d.%m.%Y.', 'Europe/London');
$day_start=$timestamps['day_start'];

De cette façon, vous laissez la fonction savoir quel format de date vous utilisez et même spécifier le fuseau horaire.

4
Julijan Anđelić
<?php echo date('U') ?>

Si vous le souhaitez, mettez-le dans un horodatage de type d'entrée MySQL . Ce qui précède fonctionne très bien (uniquement à partir de PHP 5):

<?php $timestamp_for_mysql = date('c') ?>
4
insign

S'il vous plaît soyez prudent sur l'heure/zone si vous le réglez pour enregistrer les dates dans la base de données, car j'ai eu un problème lorsque j'ai comparé les dates de mysql qui ont été converties en timestamp en utilisant strtotime. vous devez utiliser exactement la même heure/zone avant de convertir la date en horodatage, sinon strtotime () utilisera le fuseau horaire par défaut du serveur.

Veuillez voir cet exemple: https://3v4l.org/BRlmV

function getthistime($type, $modify = null) {
    $now = new DateTime(null, new DateTimeZone('Asia/Baghdad'));
    if($modify) {
        $now->modify($modify);
    }
    if(!isset($type) || $type == 'datetime') {
        return $now->format('Y-m-d H:i:s');
    }
    if($type == 'time') {
        return $now->format('H:i:s');
    }
    if($type == 'timestamp') {
        return $now->getTimestamp();
    }
}
function timestampfromdate($date) {
    return DateTime::createFromFormat('Y-m-d H:i:s', $date, new DateTimeZone('Asia/Baghdad'))->getTimestamp();
}

echo getthistime('timestamp')."--".
    timestampfromdate(getthistime('datetime'))."--".
    strtotime(getthistime('datetime'));

//getthistime('timestamp') == timestampfromdate(getthistime('datetime')) (true)
//getthistime('timestamp') == strtotime(getthistime('datetime')) (false)
1
Akam

Utilisez PHP function strtotime ()

echo strtotime ("2019/06/06");

date - Formate une heure locale/date

0
Gurpreet Singh