Horarios y fechas
Higgs proporciona una clase de fecha/hora inmutable y totalmente localizada que se basa en el objeto DateTimeImmutable de PHP, pero utiliza el método Intl
Funciones de la extensión para convertir horas entre zonas horarias y mostrar la salida correctamente para diferentes configuraciones regionales. Esta clase
es la clase Time
y vive en el espacio de nombres Higgs\I18n
.
Nota
Since the Time class extends DateTimeImmutable
, if there are features that you need that this class doesn’t provide,
probablemente puedas encontrarlos dentro del DateTimeImmutable<https://www.php.net/manual/en/class.datetimeimmutable.php> _ clase misma.
Nota
Prior to v7.3.0, the Time class extended DateTime
and some inherited methods changed
el estado actual del objeto. El error se solucionó en v7.3.0. Si necesita la clase Time antigua para retroceder
compatibilidad, puede utilizar la clase TimeLegacy
obsoleta por el momento.
Creación de instancias
Hay varias formas de crear una nueva instancia de Time. La primera es simplemente crear una nueva instancia. como cualquier otra clase.
Cuando lo haces de esta manera, puedes pasar una cadena que represente el tiempo deseado. Esto puede Sea cualquier cadena que la función strtotime() de PHP pueda analizar:
<?php
use Higgs\I18n\Time;
$myTime = new Time('+3 week');
$myTime = new Time('now');
Puede pasar cadenas que representen la zona horaria y la configuración regional en los segundos parámetros y, respectivamente. Zonas horarias puede ser cualquiera soportado por DateTimeZone de PHP<https://www.php.net/manual/en/timezones.php> __ clase. El lugar puede ser cualquiera soportado por la configuración regional de PHP<https://www.php.net/manual/en/class.locale.php>` __ clase. Si no hay ninguna ubicación o zona horaria siempre que se proporcione, se utilizarán los valores predeterminados de la aplicación.
<?php
use Higgs\I18n\Time;
$myTime = new Time('now', 'America/Chicago', 'en_US');
ahora()
La clase Time tiene varios métodos auxiliares para crear instancias de la clase. El primero de ellos es el método now()
que devuelve una nueva instancia establecida en la hora actual. Puede pasar cadenas que representen la zona horaria y la ubicación
en el segundo y parámetros, respectivamente. Si no se proporciona ninguna configuración regional o zona horaria, se utilizarán los valores predeterminados de la aplicación.
<?php
use Higgs\I18n\Time;
$myTime = Time::now('America/Chicago', 'en_US');
analizar gramaticalmente()
Este método auxiliar es una versión estática del constructor predeterminado. Se necesita una cadena aceptable como DateTimeImmutable constructor como primer parámetro, una zona horaria como segundo parámetro y la configuración regional como tercer parámetro:
<?php
use Higgs\I18n\Time;
$myTime = Time::parse('next Tuesday', 'America/Chicago', 'en_US');
hoy()
Devuelve una nueva instancia con la fecha establecida en la fecha actual y la hora establecida en medianoche. Acepta cuerdas para la zona horaria y local en el primer y segundo parámetro:
<?php
use Higgs\I18n\Time;
$myTime = Time::today('America/Chicago', 'en_US');
ayer()
Devuelve una nueva instancia con la fecha establecida en la fecha de ayer y la hora establecida en medianoche. Acepta cuerdas para la zona horaria y local en el primer y segundo parámetro:
<?php
use Higgs\I18n\Time;
$myTime = Time::yesterday('America/Chicago', 'en_US');
mañana()
Devuelve una nueva instancia con la fecha establecida en la fecha de mañana y la hora establecida en medianoche. Acepta cuerdas para la zona horaria y local en el primer y segundo parámetro:
<?php
use Higgs\I18n\Time;
$myTime = Time::tomorrow('America/Chicago', 'en_US');
crearDesdeFecha()
Si se dan entradas separadas para año, mes y día, se devolverá una nueva instancia. Si alguno de estos parámetros no se proporcionan, utilizará el valor actual para completarlo. Acepta cadenas para la zona horaria y la configuración regional en el cuarto y quinto parámetros:
<?php
use Higgs\I18n\Time;
$today = Time::createFromDate(); // Uses current year, month, and day
$anniversary = Time::createFromDate(2018); // Uses current month and day
$date = Time::createFromDate(2018, 3, 15, 'America/Chicago', 'en_US');
crearDesdeTiempo()
Como createFromDate()
excepto que solo se refiere a las horas, minutos y segundos. Utiliza el
día actual para la parte de fecha de la instancia de Hora. Acepta cadenas para la zona horaria y la configuración regional en el
cuarto y quinto parámetros:
<?php
use Higgs\I18n\Time;
$lunch = Time::createFromTime(11, 30); // 11:30 am today
$dinner = Time::createFromTime(18, 00, 00); // 6:00 pm today
$time = Time::createFromTime($hour, $minutes, $seconds, $timezone, $locale);
crear()
Una combinación de los dos métodos anteriores toma año, mes, día, hora, minutos y segundos. como parámetros separados. Cualquier valor no proporcionado utilizará la fecha y hora actuales para determinarlo. Acepta cadenas para el zona horaria y localidad en los parámetros cuarto y quinto:
<?php
use Higgs\I18n\Time;
$time = Time::create($year, $month, $day, $hour, $minutes, $seconds, $timezone, $locale);
crear desde formato()
Este es un reemplazo del método del mismo nombre de DateTimeImmutable. Esto permite configurar la zona horaria al mismo tiempo,
y devuelve una instancia Time
, en lugar de DateTimeImmutable:
<?php
use Higgs\I18n\Time;
$time = Time::createFromFormat('j-M-Y', '15-Feb-2009', 'America/Chicago');
crearFromTimestamp()
Este método toma una marca de tiempo UNIX y, opcionalmente, la zona horaria y la configuración regional, para crear una nueva instancia de tiempo:
<?php
use Higgs\I18n\Time;
$time = Time::createFromTimestamp(1501821586, 'America/Chicago', 'en_US');
Nota
Due to a bug, prior to v7.4.6, this method returned a Time instance en la zona horaria UTC cuando no especifica una zona horaria.
crearDesdeInstancia()
Cuando trabaje con otras bibliotecas que proporcionan una instancia de DateTime, puede usar este método para convertir esa a una instancia de tiempo, configurando opcionalmente la configuración regional. La zona horaria se determinará automáticamente a partir de DateTime instancia pasada en:
<?php
use Higgs\I18n\Time;
$dt = new \DateTime('now');
$time = Time::createFromInstance($dt, 'en_US');
hastaFechaHora()
Si bien no es un creador de instancias, este método es lo opuesto al método instancia, lo que le permite convertir una hora instancia en una instancia DateTime. Esto conserva la configuración de zona horaria, pero pierde la configuración regional, ya que DateTime es no conoce las configuraciones regionales:
<?php
use Higgs\I18n\Time;
$datetime = Time::toDateTime();
Mostrando el valor
Dado que la clase Time extiende DateTimeImmutable, obtienes todos los métodos de salida que proporciona, incluido el método format()
.
Sin embargo, los métodos DateTimeImmutable no proporcionan un resultado localizado. La clase Time proporciona varios métodos auxiliares.
Sin embargo, para mostrar versiones localizadas del valor.
toLocalizedString()
Esta es la versión localizada del método format()
de DateTimeImmutable. Sin embargo, en lugar de utilizar los valores con los que quizás esté familiarizado,
debe utilizar valores aceptables para IntlDateFormatter<https://www.php.net/manual/en/class.intldateformatter.php> __ clase.
Puede encontrar una lista completa de valores «aquí<https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classSimpleDateFormat.html#details>` __.
<?php
use Higgs\I18n\Time;
// Locale: en
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->toLocalizedString('MMM d, yyyy'); // March 9, 2016
// Locale: fa
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->toLocalizedString('MMM d, yyyy'); // مارس ۹, ۲۰۱۶
toDateTimeString()
Este es el primero de tres métodos auxiliares para trabajar con IntlDateFormatter<https://www.php.net/manual/en/class.intldateformatter.php> _ sin tener que recordar sus valores.
Esto devolverá una versión localizada de la cadena con el formato (Ymd H:i:s
):
<?php
use Higgs\I18n\Time;
// Locale: en
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->toDateTimeString(); // 2016-03-09 12:00:00
// Locale: fa
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->toDateTimeString(); // ۲۰۱۶-۰۳-۰۹ ۱۲:۰۰:۰۰
hastaCadenaFecha()
Muestra solo la versión localizada de la parte de fecha de la Hora:
<?php
use Higgs\I18n\Time;
// Locale: en
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->toDateString(); // 2016-03-09
// Locale: fa
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->toDateString(); // ۲۰۱۶-۰۳-۰۹
aTimeString()
Muestra solo la versión localizada de la porción de tiempo del valor:
<?php
use Higgs\I18n\Time;
// Locale: en
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->toTimeString(); // 12:00:00
// Locale: fa
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->toTimeString(); // ۱۲:۰۰:۰۰
humanizar()
Este método devuelve una cadena que muestra la diferencia entre la fecha/hora actual y la instancia en un Formato legible por humanos que está orientado a ser fácilmente comprendido. Puede crear cadenas como “hace 3 horas”, “en 1 mes”, etc.:
<?php
use Higgs\I18n\Time;
// Assume current time is: March 10, 2017 (America/Chicago)
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->humanize(); // 1 year ago
La hora exacta mostrada se determina de la siguiente manera: =============================== ==================== =============== Diferencia horaria Resultado =============================== ==================== =============== $tiempo > 1 año && < 2 años en 1 año / Hace 1 año $tiempo > 1 mes && < 1 año en 6 meses / Hace 6 meses $tiempo > 7 días && < 1 mes en 3 semanas / Hace 3 semanas $time > hoy && < 7 días en 4 días / Hace 4 días $hora == mañana / ayer Mañana / Ayer $tiempo > 59 minutos && < 1 día en 2 horas / Hace 2 horas $time > ahora && < 1 hora en 35 minutos / Hace 35 minutos $tiempo == ahora Ahora =============================== ==================== ===============
El idioma exacto utilizado se controla a través del archivo de idioma, Time.php.
Trabajar con valores individuales
El objeto Time proporciona una serie de métodos que permiten obtener y configurar elementos individuales, como el año, mes, hora, etc. de una instancia existente. Todos los valores recuperados a través de los siguientes métodos estarán completamente localizados y respetarán la configuración regional con la que se creó la instancia de Time.
Todos los siguientes métodos getX()
y setX()
también se pueden utilizar como si fueran una propiedad de clase. Entonces, cualquier llamada a métodos
También se puede acceder a archivos como getYear()
a través de $time->year
, y así sucesivamente.
captadores
Existen los siguientes captadores básicos:
<?php
use Higgs\I18n\Time;
$time = Time::parse('August 12, 2016 4:15:23pm');
// The output may vary based on locale.
echo $time->getYear(); // '2016'
echo $time->getMonth(); // '8'
echo $time->getDay(); // '12'
echo $time->getHour(); // '16'
echo $time->getMinute(); // '15'
echo $time->getSecond(); // '23'
echo $time->year; // '2016'
echo $time->month; // '8'
echo $time->day; // '12'
echo $time->hour; // '16'
echo $time->minute; // '15'
echo $time->second; // '23'
Además de estos, existen varios métodos para proporcionar información adicional sobre la fecha:
<?php
use Higgs\I18n\Time;
$time = Time::parse('August 12, 2016 4:15:23pm');
// The output may vary based on locale.
echo $time->getDayOfWeek(); // '6'
echo $time->getDayOfYear(); // '225'
echo $time->getWeekOfMonth(); // '2'
echo $time->getWeekOfYear(); // '33'
echo $time->getTimestamp(); // 1471018523 - UNIX timestamp (locale independent)
echo $time->getQuarter(); // '3'
echo $time->dayOfWeek; // '6'
echo $time->dayOfYear; // '225'
echo $time->weekOfMonth; // '2'
echo $time->weekOfYear; // '33'
echo $time->timestamp; // 1471018523
echo $time->quarter; // '3'
obtenerEdad()
Devuelve la edad, en años, entre la instancia de Time y la hora actual. Perfecto para comprobar la edad de alguien según su cumpleaños:
<?php
use Higgs\I18n\Time;
$time = Time::parse('5 years ago');
echo $time->getAge(); // 5
echo $time->age; // 5
obtenerDST()
Devuelve un valor booleano verdadero/falso en función de si la instancia de Hora está observando actualmente el horario de verano:
<?php
use Higgs\I18n\Time;
echo Time::createFromDate(2012, 1, 1)->getDst(); // false
echo Time::createFromDate(2012, 9, 1)->dst; // true
obtener local()
Devuelve un valor booleano verdadero si la instancia de Time está en la misma zona horaria en la que se ejecuta actualmente la aplicación:
<?php
use Higgs\I18n\Time;
echo Time::now()->getLocal(); // true
echo Time::now('Europe/London')->local; // false
obtenerUtc()
Devuelve un valor booleano verdadero si la instancia de Hora está en hora UTC:
<?php
use Higgs\I18n\Time;
echo Time::now('America/Chicago')->getUtc(); // false
echo Time::now('UTC')->utc; // true
obtener zona horaria()
Devuelve una nueva DateTimeZone<https://www.php.net/manual/en/class.datetimezone.php> __ objeto establece la zona horaria de la Hora instancia:
<?php
use Higgs\I18n\Time;
$tz = Time::now()->getTimezone();
$tz = Time::now()->timezone;
echo $tz->getName();
echo $tz->getOffset();
getTimezoneName()
Devuelve la cadena timezone completa<https://www.php.net/manual/en/timezones.php> __ de la instancia de Tiempo:
<?php
use Higgs\I18n\Time;
echo Time::now('America/Chicago')->getTimezoneName(); // America/Chicago
echo Time::now('Europe/London')->timezoneName; // Europe/London
Colocadores
Existen los siguientes configuradores básicos. Si alguno de los valores establecidos está fuera de rango, se generará una InvalidArgumentExeption
.
arrojado.
Nota
All setters will return a new Time instance, leaving the original instance untouched.
Nota
All setters will throw an InvalidArgumentException if the value is out of range.
<?php
$time = $time->setYear(2017);
$time = $time->setMonth(4); // April
$time = $time->setMonth('April');
$time = $time->setMonth('Feb'); // February
$time = $time->setDay(25);
$time = $time->setHour(14); // 2:00 pm
$time = $time->setMinute(30);
$time = $time->setSecond(54);
establecerzona horaria()
Convierte la hora de su zona horaria actual a la nueva:
<?php
use Higgs\I18n\Time;
$time = Time::parse('13 May 2020 10:00', 'America/Chicago');
$time2 = $time->setTimezone('Europe/London'); // Returns new instance converted to new timezone
echo $time->getTimezoneName(); // American/Chicago
echo $time2->getTimezoneName(); // Europe/London
echo $time->toDateTimeString(); // 2020-05-13 10:00:00
echo $time2->toDateTimeString(); // 2020-05-13 18:00:00
establecermarca de tiempo()
Devuelve una nueva instancia con la fecha establecida en la nueva marca de tiempo:
<?php
use Higgs\I18n\Time;
$time = Time::parse('May 10, 2017', 'America/Chicago');
$time2 = $time->setTimestamp(strtotime('April 1, 2017'));
echo $time->toDateTimeString(); // 2017-05-10 00:00:00
echo $time2->toDateTimeString(); // 2017-04-01 00:00:00
Modificando el valor
Los siguientes métodos le permiten modificar la fecha sumando o restando valores a la hora actual. esto no modifica la instancia de Time existente, pero devolverá una nueva instancia.
<?php
$time = $time->addSeconds(23);
$time = $time->addMinutes(15);
$time = $time->addHours(12);
$time = $time->addDays(21);
$time = $time->addMonths(14);
$time = $time->addYears(5);
$time = $time->subSeconds(23);
$time = $time->subMinutes(15);
$time = $time->subHours(12);
$time = $time->subDays(21);
$time = $time->subMonths(14);
$time = $time->subYears(5);
Comparando dos tiempos
Los siguientes métodos le permiten comparar una instancia de Time con otra. Todas las comparaciones se convierten primero a UTC antes de realizar comparaciones, para garantizar que las diferentes zonas horarias respondan correctamente.
es igual()
Determina si la fecha y hora pasada es igual a la instancia actual. Iguales en este caso significa que representan la mismo momento en el tiempo y no es necesario que estén en la misma zona horaria, ya que ambas horas se convierten a UTC y se comparan de esa manera:
<?php
use Higgs\I18n\Time;
$time1 = Time::parse('January 10, 2017 21:50:00', 'America/Chicago');
$time2 = Time::parse('January 11, 2017 03:50:00', 'Europe/London');
$time1->equals($time2); // true
El valor que se está probando puede ser una instancia de Time, una instancia de DateTime o una cadena con la fecha y hora completa en de una manera que una nueva instancia de DateTime pueda entender. Al pasar una cadena como primer parámetro, puede pasar una cadena de zona horaria como segundo parámetro. Si no se proporciona ninguna zona horaria, se utilizará la predeterminada del sistema:
<?php
$time1->equals('January 11, 2017 03:50:00', 'Europe/London'); // true
igual que()
Esto es idéntico al método equals()
, excepto que solo devuelve verdadero cuando la fecha, la hora Y la zona horaria son iguales.
todos idénticos:
<?php
use Higgs\I18n\Time;
$time1 = Time::parse('January 10, 2017 21:50:00', 'America/Chicago');
$time2 = Time::parse('January 11, 2017 03:50:00', 'Europe/London');
$time1->sameAs($time2); // false
$time2->sameAs('January 10, 2017 21:50:00', 'America/Chicago'); // true
es antes()
Comprueba si el tiempo transcurrido es anterior a la instancia actual. La comparación se realiza con las versiones UTC de ambas veces:
<?php
use Higgs\I18n\Time;
$time1 = Time::parse('January 10, 2017 21:50:00', 'America/Chicago');
$time2 = Time::parse('January 11, 2017 03:50:00', 'America/Chicago');
$time1->isBefore($time2); // true
$time2->isBefore($time1); // false
El valor que se está probando puede ser una instancia de Time, una instancia de DateTime o una cadena con la fecha y hora completa en de una manera que una nueva instancia de DateTime pueda entender. Al pasar una cadena como primer parámetro, puede pasar una cadena de zona horaria como segundo parámetro. Si no se proporciona ninguna zona horaria, se utilizará la predeterminada del sistema:
<?php
$time1->isBefore('March 15, 2013', 'America/Chicago'); // false
es despues()
Funciona exactamente igual que isBefore()
excepto que comprueba si el tiempo es posterior al tiempo transcurrido:
<?php
use Higgs\I18n\Time;
$time1 = Time::parse('January 10, 2017 21:50:00', 'America/Chicago');
$time2 = Time::parse('January 11, 2017 03:50:00', 'America/Chicago');
$time1->isAfter($time2); // false
$time2->isAfter($time1); // true
Visualización de diferencias
Para comparar dos tiempos directamente, usarías el método diferencia()
, que devuelve un Higgs\I18n\TimeDifference
instancia. El primer parámetro es una instancia de Hora, una instancia de FechaHora o una cadena con la fecha/hora. Si
se pasa una cadena en el primer parámetro, el segundo parámetro puede ser una cadena de zona horaria:
<?php
use Higgs\I18n\Time;
$time = Time::parse('March 10, 2017', 'America/Chicago');
$diff = $time->difference(Time::now());
$diff = $time->difference(new \DateTime('July 4, 1975', 'America/Chicago'));
$diff = $time->difference('July 4, 1975 13:32:05', 'America/Chicago');
Una vez que tenga la instancia TimeDifference, tendrá varios métodos que puede utilizar para encontrar información sobre la diferencia. entre los dos tiempos. El valor devuelto será negativo si fue en el pasado, o positivo si en el futuro de la hora original:
<?php
use Higgs\I18n\Time;
$current = Time::parse('March 10, 2017', 'America/Chicago');
$test = Time::parse('March 10, 2010', 'America/Chicago');
$diff = $current->difference($test);
echo $diff->getYears(); // -7
echo $diff->getMonths(); // -84
echo $diff->getWeeks(); // -365
echo $diff->getDays(); // -2557
echo $diff->getHours(); // -61368
echo $diff->getMinutes(); // -3682080
echo $diff->getSeconds(); // -220924800
Puede utilizar los métodos getX()
o acceder a los valores calculados como si fueran propiedades:
<?php
echo $diff->years; // -7
echo $diff->months; // -84
echo $diff->weeks; // -365
echo $diff->days; // -2557
echo $diff->hours; // -61368
echo $diff->minutes; // -3682080
echo $diff->seconds; // -220924800
humanizar()
Al igual que el método humanize()
de Time, esto devuelve una cadena que muestra la diferencia entre las horas en un
formato legible por humanos que está orientado a ser fácilmente comprendido. Puede crear cadenas como “hace 3 horas”,
“en 1 mes”, etc. Las mayores diferencias están en cómo se manejan las fechas muy recientes:
<?php
use Higgs\I18n\Time;
$current = Time::parse('March 10, 2017', 'America/Chicago');
$test = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
$diff = $current->difference($test);
echo $diff->humanize(); // 1 year ago
La hora exacta mostrada se determina de la siguiente manera: =============================== ==================== =============== Diferencia horaria Resultado =============================== ==================== =============== $tiempo > 1 año && < 2 años en 1 año / Hace 1 año $tiempo > 1 mes && < 1 año en 6 meses / Hace 6 meses $tiempo > 7 días && < 1 mes en 3 semanas / Hace 3 semanas $time > hoy && < 7 días en 4 días / Hace 4 días $tiempo > 1 hora && < 1 día en 8 horas / Hace 8 horas $tiempo > 1 minuto && < 1 hora en 35 minutos / Hace 35 minutos $tiempo < 1 minuto Ahora =============================== ==================== ===============
El idioma exacto utilizado se controla a través del archivo de idioma, Time.php.