tipos - ¿Cómo convertir fecha a marca de tiempo en PHP?
tipos de fecha php (19)
Aquí hay una solución muy simple y efectiva que usa 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í.
¿Cómo obtengo la marca de tiempo de, por ejemplo, 22-09-2008
?
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.
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 el !
, la parte de la hora se establecerá en la hora actual, que es diferente de las primeras cuatro que utilizarán la medianoche cuando omita la hora.
Otra alternativa más es usar la API IntlDateFormatter
:
$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.
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 conoce el formato, use strptime
porque strtotime
hace una conjetura para el formato, lo que no siempre es correcto. Dado que strptime
no está implementado en Windows, existe una función personalizada
¡Recuerda 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)
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 vienes :)
Si estás buscando convertir un datetime UTC ( 2016-02-14T12:24:48.321Z
) en una marca de tiempo, así es como lo harías:
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);
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);
Tenga cuidado con funciones como strtotime()
que tratan de "adivinar" lo que quiere decir (no adivina, por supuesto, las reglas están aquí ).
De hecho, el 22-09-2008
se analizará el 22 de septiembre de 2008 , ya que es la única cosa razonable.
¿Cómo se analizará el 08-09-2008
? Probablemente el 09 de agosto de 2008 .
¿Qué hay de 2008-09-50
? Algunas versiones de PHP lo analizan como el 20 de octubre de 2008 .
Entonces, si está seguro de que su entrada está en formato DD-MM-YYYY
, es mejor usar la solución que ofrece @Armin Ronacher .
Tenga cuidado con la hora / zona si la configura para guardar fechas en la base de datos, ya que tuve un problema cuando strtotime
fechas de mysql que se convirtieron en timestamp
de timestamp
usando strtotime
. debe usar exactamente la misma hora / zona antes de convertir la fecha en 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)
Usando mktime :
list($day, $month, $year) = explode(''-'', ''22-09-2008'');
echo mktime(0, 0, 0, $month, $day, $year);
Usando la función strtotime () puedes convertir fácilmente la fecha en una 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/
Usar la fecha de la función PHP ()
echo date(''m/d/Y'', 1299446702);
strtotime()
de PHP strtotime()
da
$timestamp = strtotime(''22-09-2008'');
Que funciona con los formatos de fecha y hora compatibles .
Si tienes PHP 5.3 o superior,
este método funciona tanto en Windows como en Unix y es consciente de la zona horaria , lo que probablemente sea lo que usted desea si está interesado en trabajar con fechas.
Si no te importa la zona horaria, o si quieres usar la zona horaria que usa tu servidor:
$d = DateTime::createFromFormat(''d-m-Y'', ''22-09-2008'');
echo $d->getTimestamp();
1222093324 (Esto variará según la zona horaria del servidor ...)
Si desea especificar en qué zona horaria, aquí EST. (Igual que Nueva York).
$d = DateTime::createFromFormat(''d-m-Y'', ''22-09-2008'', new DateTimeZone(''EST''));
echo $d->getTimestamp();
1222093305
O si quieres usar UTC. (Igual que "GMT".)
$d = DateTime::createFromFormat(''d-m-Y'', ''22-09-2008'', new DateTimeZone(''UTC''));
echo $d->getTimestamp();
1222093289
$time = ''22-09-2008'';
echo strtotime($time);
<?php echo date(''M j Y g:i A'', strtotime(''2013-11-15 13:01:02'')); ?>
<?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'') ?>
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