Réponses:
Cette méthode fonctionne à la fois sur Windows et Unix et est sensible au fuseau horaire , ce qui est probablement ce que vous voulez si vous travaillez avec des dates .
Si vous ne vous souciez pas du fuseau horaire ou si vous souhaitez utiliser le fuseau horaire utilisé par votre serveur:
$d = DateTime::createFromFormat('d-m-Y H:i:s', '22-09-2008 00:00:00');
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093324 (cela varie en fonction du fuseau horaire de votre serveur ...)
Si vous souhaitez spécifier dans quel fuseau horaire, ici EST. (Identique à New York.)
$d = DateTime::createFromFormat(
'd-m-Y H:i:s',
'22-09-2008 00:00:00',
new DateTimeZone('EST')
);
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093305
Ou si vous souhaitez utiliser UTC . (Identique à " GMT ".)
$d = DateTime::createFromFormat(
'd-m-Y H:i:s',
'22-09-2008 00:00:00',
new DateTimeZone('UTC')
);
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093289
Quoi qu'il en soit, c'est toujours un bon point de départ pour être strict lors de l'analyse des chaînes en données structurées. Il peut sauver un débogage gênant à l'avenir. Par conséquent, je recommande de toujours spécifier le format de date.
Il existe également 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);
date_parse_from_format
place de strptime
.
strptime
n'est pas implémenté sur les plateformes Windows.
Avec l' 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 ce qui précède échoue parce que vous utilisez un format non pris en charge , 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, qui est différente des quatre premières qui utiliseront minuit lorsque vous omettez l'heure.
Encore une autre alternative consiste à utiliser l' 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 simple est probablement DateTime.
!
horodatage basé sur Ma date changeait à chaque rafraîchissement et me rendait fou - parce que DateTime ajoutait utilement l'heure actuelle sans demander ni être informé. Grrr.
Soyez prudent avec des fonctions comme strtotime()
celle-ci, essayez de "deviner" ce que vous voulez dire (cela ne devine pas bien sûr, les règles sont là ).
En effet 22-09-2008
sera analysé au 22 septembre 2008 , car c'est la seule chose raisonnable.
Comment sera 08-09-2008
analysé? Probablement le 09 août 2008 .
Et alors 2008-09-50
? Certaines versions de PHP analysent cela au 20 octobre 2008 .
Donc, si vous êtes sûr que votre entrée est au DD-MM-YYYY
format, il est préférable d'utiliser la solution proposée par @Armin Ronacher .
dd-mm-yyyy
pas mm-dd-yyyy
.
YYYY-mm-dd
La conversion ne s'affiche que pour les utilisateurs
Cette méthode fonctionne à la fois sur Windows et Unix et est sensible au fuseau horaire , ce qui est probablement ce que vous voulez si vous travaillez avec des dates .
Si vous ne vous souciez pas du fuseau horaire ou si vous souhaitez utiliser le fuseau horaire utilisé par votre serveur:
$d = DateTime::createFromFormat('d-m-Y H:i:s', '22-09-2008 00:00:00');
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093324 (cela varie en fonction du fuseau horaire de votre serveur ...)
Si vous souhaitez spécifier dans quel fuseau horaire, ici EST. (Identique à New York.)
$d = DateTime::createFromFormat(
'd-m-Y H:i:s',
'22-09-2008 00:00:00',
new DateTimeZone('EST')
);
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093305
Ou si vous souhaitez utiliser UTC . (Identique à " GMT ".)
$d = DateTime::createFromFormat(
'd-m-Y H:i:s',
'22-09-2008 00:00:00',
new DateTimeZone('UTC')
);
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093289
Quoi qu'il en soit, c'est toujours un bon point de départ pour être strict lors de l'analyse des chaînes en données structurées. Il peut sauver un débogage gênant à l'avenir. Par conséquent, je recommande de toujours spécifier le format de date.
Utilisation de mktime :
list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
strtotime()
pour une raison quelconque, strtotime()
cela ne fonctionne pas à certaines dates et est donc très peu fiable.
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'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 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 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 d'où vous venez :)
Si vous connaissez le format, utilisez strptime
parce qu'il strtotime
fait une supposition pour le format, ce qui n'est pas toujours correct. Puisqu'il strptime
n'est pas implémenté dans Windows, il existe une fonction personnalisée
N'oubliez pas 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')); ?>
$time = '22-09-2008';
echo strtotime($time);
Utiliser la fonction PHP strtotime()
echo strtotime('2019/06/06');
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 indiquez à la fonction le format de date que vous utilisez et spécifiez même le fuseau horaire.
Veuillez faire attention au fuseau horaire 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 converties en timestamp
utilisant strtotime
. vous devez utiliser exactement la même heure / zone avant de convertir la date en horodatage sinon strtotime () utilisera le fuseau horaire du serveur par défaut.
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)
Si vous cherchez à convertir un datetime UTC ( 2016-02-14T12:24:48.321Z
) en horodatage, voici comment procéder:
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);