Comment convertir date en timestamp en PHP?
19 réponses
PHP strtotime()
donne
$timestamp = strtotime('22-09-2008');
qui fonctionne avec les formats Date et heure pris en charge Docs .
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);
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.
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 .
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
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 /
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.
é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']);
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:)
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)
<?php echo date('M j Y g:i A', strtotime('2013-11-15 13:01:02')); ?>
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
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.
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)
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);