Comment obtenir l'horodatage, par exemple 22-09-2008
?
_ strtotime()
de PHP 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();
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.
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 .
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
Utiliser mktime :
list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
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/
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.
É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']);
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 :)
<?php echo date('M j Y g:i A', strtotime('2013-11-15 13:01:02')); ?>
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)
$time = '22-09-2008';
echo strtotime($time);
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.
<?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') ?>
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)
Utilisez PHP function strtotime ()
echo strtotime ("2019/06/06");