trabajar tipos spanish hora formatos fechas fecha crear convertir con php date timestamp

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/





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(''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