Buscar..


Sintaxis

  • fecha de cadena (cadena $ formato [, int $ marca de hora = hora ()])
  • int strtotime (cadena $ tiempo [, int $ ahora])

Analizar las descripciones de fechas en inglés en un formato de fecha

Usando la función strtotime() combinada con la date() , puede analizar diferentes descripciones de texto en inglés para las fechas:

// Gets the current date
echo date("m/d/Y", strtotime("now")), "\n"; // prints the current date
echo date("m/d/Y", strtotime("10 September 2000")), "\n"; // prints September 10, 2000 in the m/d/Y format
echo date("m/d/Y", strtotime("-1 day")), "\n"; // prints yesterday's date
echo date("m/d/Y", strtotime("+1 week")), "\n"; // prints the result of the current date + a week
echo date("m/d/Y", strtotime("+1 week 2 days 4 hours 2 seconds")), "\n"; // same as the last example but with extra days, hours, and seconds added to it
echo date("m/d/Y", strtotime("next Thursday")), "\n"; // prints next Thursday's date
echo date("m/d/Y", strtotime("last Monday")), "\n"; // prints last Monday's date
echo date("m/d/Y", strtotime("First day of next month")), "\n"; // prints date of first day of next month
echo date("m/d/Y", strtotime("Last day of next month")), "\n"; // prints date of last day of next month
echo date("m/d/Y", strtotime("First day of last month")), "\n"; // prints date of first day of last month
echo date("m/d/Y", strtotime("Last day of last month")), "\n"; // prints date of last day of last month

Convertir una fecha en otro formato

Los basicos

La forma más simple de convertir un formato de fecha en otro es usar strtotime() con date() . strtotime() convertirá la fecha en una marca de tiempo Unix . Ese sello de tiempo de Unix se puede pasar a la date() para convertirlo al nuevo formato.

$timestamp = strtotime('2008-07-01T22:35:17.02');
$new_date_format = date('Y-m-d H:i:s', $timestamp);

O como una sola línea:

$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));

Tenga en cuenta que strtotime() requiere que la fecha esté en un formato válido . Si no se proporciona un formato válido, strtotime() devolverá false, lo que provocará que su fecha sea 1969-12-31.

Usando DateTime()

A partir de PHP 5.2, PHP ofreció la clase DateTime() que nos ofrece herramientas más poderosas para trabajar con fechas (y hora). Podemos reescribir el código anterior usando DateTime() como tal:

$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = $date->format('Y-m-d H:i:s');

Trabajando con las marcas de tiempo de Unix

date() toma una marca de tiempo de Unix como su segundo parámetro y le devuelve una fecha formateada:

$new_date_format = date('Y-m-d H:i:s', '1234567890');

DateTime () funciona con las marcas de tiempo de Unix agregando una @ antes de la marca de hora:

$date = new DateTime('@1234567890');
$new_date_format = $date->format('Y-m-d H:i:s');

Si la marca de tiempo que tiene es en milisegundos (puede terminar en 000 y / o la marca de tiempo tiene una longitud de trece caracteres), deberá convertirla en segundos antes de poder convertirla a otro formato. Hay dos maneras de hacer esto:

  • Recorte los últimos tres dígitos usando substr()

Recortar los últimos tres dígitos se puede lograr de varias maneras, pero usar substr() es la más fácil:

$timestamp = substr('1234567899000', -3);
  • Divide el substr por 1000

También puede convertir la marca de tiempo en segundos dividiendo por 1000. Debido a que la marca de tiempo es demasiado grande para que los sistemas de 32 bits puedan realizar operaciones matemáticas, necesitará usar la biblioteca BCMath para hacer las matemáticas como cadenas:

$timestamp = bcdiv('1234567899000', '1000');

Para obtener una marca de tiempo Unix puede usar strtotime() que devuelve una marca de tiempo Unix:

$timestamp = strtotime('1973-04-18');

Con DateTime () puedes usar DateTime::getTimestamp()

$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->getTimestamp();

Si está ejecutando PHP 5.2, puede usar la opción de formato U lugar:

$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');

Trabajar con formatos de fecha no estándar y ambiguos.

Desafortunadamente, no todas las fechas con las que un desarrollador tiene que trabajar están en un formato estándar. Afortunadamente, PHP 5.3 nos proporcionó una solución para eso. DateTime::createFromFormat() nos permite decirle a PHP en qué formato se encuentra una cadena de fecha para que pueda analizarse con éxito en un objeto DateTime para una mayor manipulación.

$date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
$new_date_format = $date->format('Y-m-d H:i:s');

En PHP 5.4, obtuvimos la capacidad de hacer acceso a los miembros de la clase en la creación de instancias, lo que nos permite convertir nuestro código DateTime() en una sola línea:

$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');

Desafortunadamente, esto todavía no funciona con DateTime::createFromFormat() .

Uso de constantes predefinidas para el formato de fecha

Podemos usar constantes predefinidas para el formato de date() en date() lugar de las cadenas de formato de fecha convencionales desde PHP 5.1.0.


Constantes de formato de fecha predefinidas disponibles

DATE_ATOM - Átomo (2016-07-22T14: 50: 01 + 00: 00)

DATE_COOKIE - Cookies HTTP (viernes, 22-jul-16 14:50:01 UTC)

DATE_RSS - RSS (viernes, 22 de julio de 2016 14:50:01 +0000)

DATE_W3C - World Wide Web Consortium (2016-07-22T14: 50: 01 + 00: 00)

DATE_ISO8601 - ISO-8601 (2016-07-22T14: 50: 01 + 0000)

DATE_RFC822 - RFC 822 (Vie, 22 de julio 16 14:50:01 +0000)

DATE_RFC850 - RFC 850 (viernes, 22-jul-16 14:50:01 UTC)

DATE_RFC1036 - RFC 1036 (Vie, 22 de julio 16 14:50:01 +0000)

DATE_RFC1123 - RFC 1123 (viernes, 22 de julio de 2016, 14:50:01 +0000)

DATE_RFC2822 - RFC 2822 (viernes, 22 de julio de 2016 14:50:01 +0000)

DATE_RFC3339 - Igual que DATE_ATOM (2016-07-22T14: 50: 01 + 00: 00)


Ejemplos de uso

echo date(DATE_RFC822);

Esto dará salida: viernes, 22 de julio 16 14:50:01 +0000

echo date(DATE_ATOM,mktime(0,0,0,8,15,1947));

Esto dará como resultado: 1947-08-15T00: 00: 00 + 05: 30

Consiguiendo la diferencia entre dos fechas / horarios.

La forma más factible es usar la clase DateTime .

Un ejemplo:

<?php
// Create a date time object, which has the value of ~ two years ago
$twoYearsAgo = new DateTime("2014-01-18 20:05:56");
// Create a date time object, which has the value of ~ now
$now = new DateTime("2016-07-21 02:55:07");

// Calculate the diff
$diff = $now->diff($twoYearsAgo);

// $diff->y contains the difference in years between the two dates
$yearsDiff = $diff->y;
// $diff->m contains the difference in minutes between the two dates
$monthsDiff = $diff->m;
// $diff->d contains the difference in days between the two dates
$daysDiff = $diff->d;
// $diff->h contains the difference in hours between the two dates
$hoursDiff = $diff->h;
// $diff->i contains the difference in minutes between the two dates
$minsDiff = $diff->i;
// $diff->s contains the difference in seconds between the two dates
$secondsDiff = $diff->s;

// Total Days Diff, that is the number of days between the two dates
$totalDaysDiff = $diff->days;

// Dump the diff altogether just to get some details ;)
var_dump($diff);

Además, comparar dos fechas es mucho más fácil, solo use los operadores de comparación , como:

<?php
// Create a date time object, which has the value of ~ two years ago
$twoYearsAgo = new DateTime("2014-01-18 20:05:56");
// Create a date time object, which has the value of ~ now
$now = new DateTime("2016-07-21 02:55:07");
var_dump($now > $twoYearsAgo); // prints bool(true)
var_dump($twoYearsAgo > $now); // prints bool(false)
var_dump($twoYearsAgo <= $twoYearsAgo); // prints bool(true)
var_dump($now == $now); // prints bool(true)


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow