Respuestas:
Este método funciona tanto en Windows como en Unix y tiene en cuenta la zona horaria , que es probablemente 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 diferirá según la zona horaria de su servidor ...)
Si desea 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 para ser estricto al analizar cadenas en datos estructurados. Puede ahorrar una depuración incómoda en el futuro. Por lo tanto, recomiendo especificar siempre el formato de fecha.
También hay strptime () 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);
date_parse_from_format
lugar de strptime
.
strptime
no está implementado en plataformas Windows.
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á usando un formato no compatible , puede usar
$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 tiempo se establecerá en la hora actual, que es diferente de las cuatro primeras que utilizarán la medianoche cuando omita la hora.
Otra alternativa es usar 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 fecha localizadas, la opción más fácil es probablemente DateTime.
!
marca de fecha y hora basada en Mi fecha cambiaba en cada actualización y me volvía loco, porque DateTime estaba agregando la hora actual sin preguntar ni decir nada. Grrr.
Tenga cuidado con funciones como strtotime()
esa, intente "adivinar" lo que quiere decir (no adivina, por supuesto, las reglas están aquí ).
De hecho 22-09-2008
, se analizará el 22 de septiembre de 2008 , ya que es lo único razonable.
¿Cómo se 08-09-2008
analizará? Probablemente el 09 de agosto de 2008 .
¿Qué hay de 2008-09-50
? Algunas versiones de PHP analizan esto el 20 de octubre de 2008 .
Entonces, si está seguro de que su entrada está en DD-MM-YYYY
formato, es mejor usar la solución ofrecida por @Armin Ronacher .
dd-mm-yyyy
, no mm-dd-yyyy
.
YYYY-mm-dd
La conversión solo se muestra a los usuarios
Este método funciona tanto en Windows como en Unix y tiene en cuenta la zona horaria , que es probablemente 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 diferirá según la zona horaria de su servidor ...)
Si desea 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 para ser estricto al analizar cadenas en datos estructurados. Puede ahorrar una depuración incómoda en el futuro. Por lo tanto, recomiendo especificar siempre el formato de fecha.
Usando mktime :
list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
strtotime()
por alguna razón strtotime()
no funciona en ciertas fechas y, por lo tanto, es poco confiable.
Usando la función strtotime () puede convertir fácilmente la fecha a la marca de tiempo
<?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);
?>
Más información: http://php.net/manual/en/function.strtotime.php
Herramienta de conversión en línea: http://freeonlinetools24.com/
Aquí hay una solución muy simple y efectiva usando las funciones split
y 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);
Funcionó como un encanto para mí.
Dado que la función strptime()
no funciona para Windows y strtotime()
puede devolver resultados inesperados, recomiendo usar 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 desea saber con certeza si una fecha se analiza en algo que espera, puede usar 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
Es obvio en este caso, pero, por ejemplo, 03-04-2008
podría ser el 3 de abril o el 4 de marzo, dependiendo de dónde vengas :)
Si conoce el uso del formato strptime
porque strtotime
adivina el formato, lo que no siempre es correcto. Como strptime
no está implementado en Windows, hay una función personalizada
¡Recuerde que el valor de retorno tm_year
es de 1900! y tm_month
es 0-11
Ejemplo:
$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);
Usar la función 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
<?php echo date('U') ?>
Si lo desea, póngalo en una marca de tiempo del tipo de entrada MySQL . Lo anterior funciona muy bien (solo en PHP 5 o posterior):
<?php $timestamp_for_mysql = date('c') ?>
Así es como lo haría:
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 esta manera, le permite a la función saber qué formato de fecha está utilizando e incluso especificar la zona horaria.
Tenga cuidado con la hora / zona si la configura para guardar fechas en la base de datos, ya que tuve un problema al comparar las fechas de mysql que se convirtieron al timestamp
usostrtotime
. debe usar exactamente la misma hora / zona antes de convertir la fecha a la marca de tiempo; de lo contrario, strtotime () usará la zona horaria predeterminada del servidor.
Por favor vea este ejemplo: 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 está buscando convertir una fecha y hora UTC ( 2016-02-14T12:24:48.321Z
) en marca de tiempo, así es como lo haría:
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);