¿Cómo convertir fecha a marca de tiempo en PHP?
¿Cómo obtengo la marca de tiempo de, por ejemplo 22-09-2008
?
Este método funciona tanto en Windows como en Unix y tiene en cuenta la zona horaria , que probablemente sea lo que desea si trabaja con fechas .
Si no le importa la zona horaria o desea utilizar la zona horaria que utiliza su servidor:
$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 (Esto variará según la zona horaria de su servidor...)
Si quieres especificar en qué zona horaria, aquí EST. (Igual que Nueva 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
O si quieres usar UTC . (Igual que " 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
De todos modos, siempre es un buen punto de partida ser estricto al analizar cadenas en datos estructurados. Puede evitar depuraciones incómodas en el futuro. Por lo tanto recomiendo especificar siempre el formato de fecha.
También existe strptime()
el que espera exactamente un formato:
$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900);
Advertencias:
- Esta función no está implementada en Windows.
- Esta función ha quedado DESPRECADA a partir de PHP 8.1.0. Se desaconseja confiar en esta función.
Con DateTime
API :
$dateTime = new DateTime('2008-09-22');
echo $dateTime->format('U');
// or
$date = new DateTime('2008-09-22');
echo $date->getTimestamp();
Lo mismo con la API de procedimiento:
$date = date_create('2008-09-22');
echo date_format($date, 'U');
// or
$date = date_create('2008-09-22');
echo date_timestamp_get($date);
Si lo anterior falla porque está utilizando un formato no compatible , puede utilizar
$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');
Tenga en cuenta que si no configura !
, la parte de la hora se configurará en la hora actual, que es diferente de los primeros cuatro que usarán la medianoche cuando omita la hora.
Otra alternativa más es utilizar la IntlDateFormatter
API:
$formatter = new IntlDateFormatter(
'en_US',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'GMT',
IntlDateFormatter::GREGORIAN,
'dd-MM-yyyy'
);
echo $formatter->parse('22-09-2008');
A menos que esté trabajando con cadenas de fechas localizadas, la opción más fácil probablemente sea DateTime.