Comment convertir date en timestamp en PHP?

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

301
demandé sur pimvdb 2008-09-22 12:41:20

19 réponses

PHP strtotime() donne

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

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

552
répondu Owen 2013-08-28 10:13:27

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);
178
répondu Armin Ronacher 2014-02-24 20:20:09

avec DateTime API :

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

// or 

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

identique à 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 ce qui précède é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 portion de temps sera définie à l'heure actuelle, ce qui est différent des quatre premières qui utiliseront minuit quand vous omettez temps.

encore une autre alternative est d'utiliser le IntlDateFormatter API:

$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.

115
répondu Gordon 2013-03-11 17:57:27

soyez prudent avec des fonctions comme strtotime() qui essaient de" deviner "ce que vous voulez dire (il ne devine pas bien sûr, les règles sont ici ).

en effet 22-09-2008 sera interprété comme 22 septembre 2008 , car il est la seule chose raisonnable.

comment 08-09-2008 sera-t-il interprété? Probablement 09 Août 2008 .

et 2008-09-50 ? Quelque versions de PHP parse ceci comme 20 octobre 2008 .

donc, si vous êtes sûr que votre entrée est dans le format DD-MM-YYYY , il est préférable d'utiliser la solution offerte par @Armin Ronacher .

112
répondu daremon 2017-05-23 12:26:10



si vous avez PHP 5.3 ou plus,

cette méthode fonctionne sur à la fois Windows et Unix et est fuseau horaire conscient, ce qui est probablement ce que vous voulez si vous êtes sérieux au sujet de travailler avec les dates.

si vous ne vous souciez pas du fuseau horaire, ou si vous voulez utiliser le fuseau horaire utilisé par votre serveur:

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

1222093324 (cela sera différent selon le fuseau horaire du serveur...)



si vous voulez spécifier dans quel fuseau horaire, voici. (Même qu'à New York.)

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

1222093305



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

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

1222093289



45
répondu Prof. Falken 2015-08-27 07:15:41

utilisant mktime :

list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
41
répondu Till 2008-09-22 08:44:11

en utilisant la fonction strtotime() vous pouvez facilement convertir la date en timestamp

<?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'informations: http://php.net/manual/en/function.strtotime.php

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

14
répondu klit67 2015-04-06 22:24:06

Voici une solution très simple et efficace en 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);

ça a fonctionné comme un charme pour moi.

13
répondu Victor Bojica 2014-04-12 19:44:19

étant donné que la fonction strptime() ne fonctionne pas pour Windows et strtotime() peut retourner 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
répondu B7ackAnge7z 2012-06-11 10:36:49

si vous voulez savoir avec certitude si une date se divise en 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 d'où vous venez:)

6
répondu Ja͢ck 2014-12-24 00:12:00

si vous connaissez le format utiliser strptime parce que strtotime fait une supposition pour le format, qui pourrait ne pas toujours être correcte. Depuis strptime n'est pas mis en œuvre dans Windows, il ya une fonction personnalisée

rappelez - vous que la valeur de retour tm_year est 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
répondu blavla 2013-03-11 18:17:38
<?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
répondu Michael Chambers 2013-11-15 00:26:56
$time = '22-09-2008';
echo strtotime($time);
5
répondu Praveen Srinivasan 2014-07-31 07:31:27
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
répondu Phil Jackson 2012-02-12 14:39:17
<?php echo date('U') ?>

si vous voulez, mettez-le dans un MySQL timestamp de type input. Ce qui précède fonctionne très bien (seulement en PHP 5 ou plus tard):

<?php $timestamp_for_mysql = date('c') ?>
4
répondu insign 2014-04-12 19:46:05

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
répondu Julijan Anđelić 2017-04-13 09:12:33

S'il vous plaît faire attention à l'heure/zone si vous le définissez 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 converti en timestamp en utilisant strtotime . vous devez utiliser exactement la même heure/zone avant de convertir la date en timestamp sinon strtotime() utilisera le timezone du serveur par défaut.

s'il vous Plaît 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
répondu Akam 2017-04-13 13:18:25

Use fonction PHP date ()

echo date('m/d/Y', 1299446702);

date - Format d'une date/heure locale

-1
répondu Gurpreet Singh 2018-02-09 10:03:23

si vous cherchez à convertir un UTC datetime ( 2016-02-14T12:24:48.321Z ) en timestamp, voici comment vous le feriez:

function UTCToTimestamp($utc_datetime_str)
{
    preg_match_all('/(.+?)T(.+?)\.(.*?)Z/i', $utc_datetime_str, $matches_arr);
    $datetime_str = $matches_arr[1][0]." ".$matches_arr[2][0];

    return strtotime($datetime_str);
}

$my_utc_datetime_str = '2016-02-14T12:24:48.321Z';
$my_timestamp_str = UTCToTimestamp($my_utc_datetime_str);
-2
répondu Obinwanne Hill 2016-02-27 15:52:38