Soy padre desde hace un año y medio y eso se nota claramente al llegar a tiempo a la fusión de relaciones públicas o al impulso de este paquete. El tiempo es la mayor limitación aquí. Me encantaría pasarle el proyecto a alguien que tenga más tiempo y motivación para impulsarlo. Sólo envíame un mensaje. ¡Salud!
_ _ _ __ ___ ___ _ __ ___ ___ _ __ | |_ _ __ | |__ _ __ | '_ ` _ / _ | '_ ` _ / _ '_ | __| | '_ | '_ | '_ | | | | | | (_) | | | | | | __/ | | | |_ _| |_) | | | | |_) | |_| |_| |_|___/|_| |_| |_|___|_| |_|__(_) .__/|_| |_| .__/ |_| |_|
Registro de cambios
Biblioteca de fechas para analizar, manipular y formatear fechas con i18n.
PHP 5.3 o posterior desde moment.php se basa en la clase DateTime de PHP.
Fácil instalación a través del compositor. ¿Aún no tienes idea de qué es el compositor? Infórmate aquí.
composer require fightbulc/moment
$m = nuevo MomentoMomento(); // el valor predeterminado es "ahora" UTCecho $m->format(); // por ejemplo 2012-10-03T10:00:00+0000$m = new MomentMoment('ahora', 'Europa/Berlín');echo $m->format(); // por ejemplo, 2012-10-03T12:00:00+0200$m = new MomentMoment('2017-06-06T10:00:00', 'Europa/Berlín');echo $m->format(); // por ejemplo 2012-10-03T12:00:00+0200$m = new MomentMoment(1499366585);echo $m->format(); // por ejemplo 2017-07-06T18:43:05+0000
Moment analiza los siguientes formatos de fecha como entrada:
const ÁTOMO = 'Ym-dTH:i:sP'; // 2005-08-15T15:52:01+00:00const COOKIE = 'l, dMy H:i:s T'; // Lunes, 15 de agosto de 2005 15:52:01 UTCconst ISO8601 = 'Ym-dTH:i:sO'; // 2005-08-15T15:52:01+0000const RFC822 = 'D, d M y H:i:s O'; // Lun, 15 de agosto de 2005 15:52:01 +0000const RFC850 = 'l, dMy H:i:s T'; // Lunes, 15-ago-05 15:52:01 UTCconst RFC1036 = 'D, d M y H:i:s O'; // Lun, 15 de agosto de 2005 15:52:01 +0000const RFC1123 = 'D, d M Y H:i:s O'; // Lun, 15 de agosto de 2005 15:52:01 +0000const RFC2822 = 'D, d M Y H:i:s O'; // Lun, 15 de agosto de 2005 15:52:01 +0000const RSS = 'D, d M Y H:i:s O'; // lunes, 15 de agosto de 2005 15:52:01 +0000const W3C = 'Ym-dTH:i:sP'; // 2005-08-15T15:52:01+00:00// Moment también intenta analizar fechas sin zona horaria o sin segundosconst NO_TZ_MYSQL = 'Ymd H:i:s'; // 2005-08-15 15:52:01const NO_TZ_NO_SECS = 'Ymd H:i'; // 2005-08-15 15:52const NO_TIME = 'Ymd'; // 2005-08-15// las fracciones de tiempo ".000" se eliminarán automáticamente$timeWithFraction = '2016-05-04T10:00:00.000';
Eche un vistazo a la carpeta Locales
para ver todos los idiomas admitidos. La configuración regional predeterminada es en_GB
.
$m = new MomentMoment();echo $m->format('[Día de la semana:] l'); // por ejemplo, día laborable: miércoles// establecer alemán localeMomentMoment::setLocale('de_DE');$m = new MomentMoment();echo $m->format('[Wochentag:] l'); // por ejemplo Wochentag: Mittwoch
Idiomas admitidos hasta el momento:
ar_TN
Árabe (Túnez) ca_ES
Catalán cs_CZ
Checo da_DK
Danés de_DE
Alemán (Alemania) en_CA
Inglés (Canadá) en_GB
Inglés (Británico) en_US
Inglés (Americano) eo_EO
Esperanto es_ES
Español (Europa) fa_IR
Farsi fi_FI
Finlandés fr_CA
Francés (Canadá) fr_FR
Francés ( Europa) hu_HU
Húngaro id_ID
Indonesio it_IT
Italiano ja_JP
Japonés kz_KZ
Kazajo lv_LV
Letón (Latviešu) nl_NL
Holandés oc_LNC
Lengadociano pl_PL
Polaco pt_BR
Portugués (Brasil) pt_PT
Portugués (Portugal) ru_RU
Ruso (versión básica) sv_SE
Sueco th_TH
Tailandés tr_TR
Turco uk_UA
Ucraniano vi_VN
Vietnamita zh_CN
Chino zh_TW
Chino (tradicional)
$m = new MomentMoment('2012-04-25T03:00:00', 'CET');echo $m->setTimezone('UTC')->format(); // 2012-04-25T01:00:00+0000
MomentMoment::setDefaultTimezone('CET');$m = new MomentMoment('2016-09-13T14:32:06');echo $m->format(); // 2016-09-13T14:32:06+0100
$m = new MomentMoment('2012-04-25T03:00:00', 'CET');echo $m->format('l, dS F Y / H:i (e)'); // Miércoles, 25 de abril de 2012 / 03:00 (Europa/Berlín)
Los formatos se basan en la función Date y la clase DateTime de PHP.
Ahora puede inyectar un manejo de formato diferente pasando una clase que implemente FormatsInterface
. Puede encontrar un ejemplo dentro de la carpeta de prueba para implementar todos los formatos desde moment.js. Gracias a Ashish por tomarse el tiempo para hacer coincidir los formatos moment.js
con los de PHP. Eche un vistazo al script de prueba para ver el ejemplo en acción.
Todo el mundo puede escribir clases de formato de la misma manera. Es fácil y escalable.
// obtener la clase de formatos deseados// crear un momento$m = new MomentMoment('2012-04-25T03:00:00', 'CET');// formato con definición moment.jsecho $m->format('LLLL ', nuevo MomentCustomFormatsMomentJs()); // miércoles 25 de abril de 2012 3:00 a.m.
Custom formats
también pueden formar parte de cada Locale
. Si aún no existe para su localidad, continúe y agréguelo. Vea un ejemplo para la configuración regional francesa.
Simplemente ajuste todo el texto dentro de []
y todos los caracteres se escaparán automáticamente.
$m = new MomentMoment('2012-04-25T03:00:00', 'CET');echo $m->format('[Estamos en el mes de:] F'); // Estamos en el mes de: Abril
El cálculo ordinal interal de PHP parece tener errores. Agregué una solución rápida para solucionar este problema.
El siguiente ejemplo imprime la semana del año de la fecha dada. Debería imprimirse 22nd
:
// fecha de función interna('WS', mktime(12, 22, 0, 5, 27, 2014)); // 22// moment.php$m = new MomentMoment('2014-05-27T12:22:00', 'CET');$m->format('WS'); // 22
$m = new MomentMoment('2012-05-15T12:30:00', 'CET');echo $m->addHours(2)->format(); // 2012-05-15T14:30:00+0200$m = new MomentMoment('2012-05-15T12:30:00', 'CET');echo $m->subtractDays(7)->subtractMinutes(15 )->formato(); // 2012-05-08T12:15:00+0200$m = nuevo MomentoMomento('@1401443979', 'CET'); // unix timeecho $m->subtractDays(7)->subtractMinutes(15)->format(); // 2014-05-23T09:44:39+0000
A veces es útil tomar un momento determinado y trabajar con él sin cambiar el origen. Para eso use cloning()
.
$m = new MomentMoment('2012-05-15T12:30:00', 'CET');$c = $m->cloning()->addDays(1);echo $m->getDay(); // 15echo $c->getDay(); // 16
Alternativamente, puede habilitar el modo inmutable en el origen.
$m = new MomentMoment('2012-05-15T12:30:00', 'CET', true);$c = $m->addDays(1);echo $m->getDay(); // 15echo $c->getDay(); // 16// También puedes cambiar el modo inmutable después de la creación:$m->setImmutableMode(false)->subtractDays(1);echo $m->getDay(); // 14
El modo inmutable hace que todos los métodos de modificación llamen cloning()
implícitamente antes de aplicar sus modificaciones.
Agregar | Sustraer |
---|---|
agregarSegundos($s) | restarSegundos($s) |
agregarMinutos($i) | restarMinutos($i) |
agregarHoras($h) | restarHoras($h) |
agregarDias($d) | restarDias($d) |
agregar Semanas ($ w) | restar semanas ($w) |
agregarMeses($m) | restarMeses($m) |
agregarAños($y) | restarAños($y) |
Setter | Adquiridor |
---|---|
establecerSegundo($s) | obtenerSegundo() |
establecerMinuto($m) | obtenerMinuto() |
establecerHora($h) | obtenerHora() |
establecerDía($d) | obtenerDía() |
establecerMes($m) | obtenerMes() |
establecerAño($y) | obtenerAño() |
-- | obtenerCuarto() |
$m = new MomentMoment('2013-02-01T07:00:00');$momentFromVo = $m->fromNow();// o desde un momento específico$m = new MomentMoment('2013-02-01T07: 00:00');$momentoDeVo = $m->from('2011-09-25T10:00:00');// el resultado viene como un objeto de valor classecho $momentFromVo->getDirection() // "future"echo $momentFromVo->getSeconds() // -42411600echo $momentoDeVo->getMinutes() // -706860echo $momentoFromVo->getHours() // -11781echo $momentFromVo->getDays() // -490.88echo $momentFromVo->getWeeks() // -70.13echo $momentFromVo->getMonths() // -17.53echo $momentFromVo- >getAños() // -1.42echo $momentFromVo->getRelative() // en un año
A veces resulta útil obtener los límites del período de una fecha determinada. Por ejemplo, en caso de que hoy sea miércoles y necesite las fechas de inicio y fin de la semana de hoy. Los períodos permitidos son week
, month
y quarter
.
$m = new MomentMoment('2013-10-23T10:00:00');$momentPeriodVo = $m->getPeriod('week');// los resultados vienen así como un objeto de valor classecho $momentPeriodVo->getStartDate( ) ->formato('Ymd'); // 2013-10-21echo $momentoPeriodVo->getEndDate() ->formato('Ymd'); // 2013-10-27echo $momentoPeriodVo->getRefDate() ->formato('Ymd'); // 2013-10-23echo $momentoPeriodVo->getInterval(); // 43 = semana del año
Mismo procedimiento para períodos mensuales y trimestrales:
$momentPeriodVo = $m->getPeriod('mes');$momentPeriodVo = $m->getPeriod('trimestre');
La hora del calendario muestra la hora relativa a now
, pero de forma ligeramente diferente a Moment::fromNow()
. Moment::calendar()
formateará una fecha con diferentes cadenas dependiendo de qué tan cerca de hoy esté la fecha.
(nuevo MomentoMomento('2014-03-30T16:58:00', 'CET'))->restarDías(6)->calendario(); // semana pasada(new MomentMoment('2014-03-30T16:58:00', 'CET'))->subtractDays(1)->calendar(); // ayer(new MomentMoment('2014-03-30T16:58:00', 'CET'))->calendar(); // hoy(new MomentMoment('2014-03-30T16:58:00', 'CET'))->addDays(1)->calendar(); // mañana(new MomentMoment('2014-03-30T16:58:00', 'CET'))->addDays(3)->calendar(); // la próxima semana(new MomentMoment('2014-03-30T16:58:00', 'CET'))->addDays(10)->calendar(); // todo lo demás
Tiempo | Mostrar |
---|---|
La semana pasada | El lunes pasado a las 15:54 |
el dia anterior | Ayer a las 15:54 |
el mismo dia | Hoy a las 15:54 |
Al día siguiente | Mañana a las 15:54 |
La próxima semana | miércoles a las 15:54 |
Todo lo demás | 09/04/2014 |
Nota: Utilice $moment->calendar(false)
para omitir la hora at 00:00
.
Mismo proceso que para moment.js: muta el momento original configurándolo al inicio/final de una unidad de tiempo.
$m = new MomentMoment('20140515T10:15:23', 'CET');$m->startOf('año'); // fijado para el 1 de enero a las 00:00 de este año$m->startOf('trimestre'); // establecido al comienzo del trimestre actual, 1er día de los meses, 00:00$m->startOf('mes'); // establecido en el primero de este mes, 00:00$m->startOf('week'); // establecido en el primer día de esta semana, 00:00$m->startOf('day'); // establecido en 00:00 hoy$m->startOf('hora'); // establecido en ahora, pero con 0 minutos, 0 segundos$m->startOf('minuto'); // establecido en ahora, pero con 0 segundos$m->endOf('year'); // fijado para el 31 de diciembre a las 23:59 de este año$m->endOf('trimestre'); // establecido al final del trimestre actual, último día del mes, 23:59$m->endOf('month'); // establecido en el último de este mes, 23:59$m->endOf('week'); // establecido en el último día de esta semana, 23:59$m->endOf('day'); // establecido en 23:59 hoy$m->endOf('hora'); // establecido en ahora, pero con 59 minutos, 59 segundos$m->endOf('minuto'); // establecido en ahora, pero con 59 segundos
Nota: ignoré el período de second
ya que no estamos tratando con milisegundos.
Para uno de mis clientes necesitaba obtener momentos para días laborables seleccionados. La tarea era: dame las fechas de Tuesdays
y Thursdays
de las próximas tres semanas. Entonces agregué un pequeño controlador que hace exactamente esto. Como resultado, recibirá una matriz llena de Moment Objects
.
// 1 - 7 = lunes - domingo$NúmerosDíaSemana = [2, // martes4, // jueves];$m = new MomentMoment();$fechas = $m->getMomentsByWeekdays($NúmerosDíaSemana, 3);// $ fechas = [Momento, Momento, Momento...]
Ahora puede ejecutar el resultado y formatearlo en un campo desplegable o para lo que necesite.
Intente trasladar métodos útiles desde moment.js
Agregar pruebas unitarias
agregado:
soporte para PHP 8.2 #218
soporte para PHP 8.3 #227
fijado:
local francés
pruebas canadienses
agregado:
idioma esperanto
Localidad kazaja
fijado:
Coincidencia de firma DateTime::createFromFormat
agregado:
idioma farsi
agregado:
comprobaciones de código frente a los flujos de trabajo de acciones de GH
Configuración regional canadiense para inglés/francés
fijado:
fusionarse con un par de relaciones públicas (¡gracias!)
agregado:
Finalizar configuración regional
fijado:
local sueco
configuración regional italiana actualizada
agregado:
formatos personalizados para en_US
bandera para cargar una configuración regional similar
problema de escritura solucionado
fijado:
falta formato de hora relativa
permitir tiempo unix de 9 dígitos
Se corrigió RFC2822 como formato válido.
tiempo relativo fijo
configuración regional noruega agregada
correcciones y adiciones de configuración regional (consulte las confirmaciones del 22.11.2018)
fijado:
localidad occitana
fijado:
Problema local ruso
agregado:
Portugués (pt_PT)
fijado:
Pedido local húngaro entre semana
agregado:
permitir inicializar Moment con marca de tiempo Unix sin @ inicial
fijado:
Corrige el formato de 'LLL' en formatos personalizados
fijado:
se eliminó la sintaxis única de php5.4+
fijado:
Nombres de días y meses daneses en mayúsculas y minúsculas correctas
local francés
PHPDocs
agregado:
constantes para NO_TZ_MYSQL
, NO_TZ_NO_SECS
y NO_TIME
al analizar fechas
agregado:
Formato personalizado holandés
fijado:
local ruso
agregado:
local turco
fijado:
Localidad lengadociana
fijado:
PHP7.1 setTime requiere $microseconds
agregado:
local ucraniano
agregado:
local húngaro
fijado:
Localidad lengadociana
agregado:
Local vietnamita
Localidad lengadociana
agregado:
Cambiar zona horaria predeterminada
fijado:
FormatosDocumentos de interfaz
agregado:
localidad árabe
Formato personalizado a nivel local
fijado:
local ruso
agregado:
Pruebas locales rusas
fijado:
local polaco
Cálculo de segundos
fijado:
Ruso: más correcciones de tiempo relativo
fijado:
Hora relativa local rusa: manejo del día
fijado:
falta manejo inmutable
fijado:
Configuración regional polaca mejorada (se agregó Nominativ)
fijado:
local chino
Se agregaron formatos aceptados a README.
fijado:
local tailandés
agregado:
local catalán
fijado:
Prueba local polaca
agregado:
local ruso
fijado:
Prueba local polaca
agregado:
modo inmutable
fijado:
local polaco
agregado:
local polaco
agregado:
local indonesio
agregado:
local japonés
fijado:
error tipográfico en la configuración regional holandesa
agregado:
local holandés
agregado:
local sueco
agregado:
local danés
fijado:
Día de inicio/finalización fijo para la configuración regional rumana.
fijado:
agregar un carácter delimitador a la configuración regional italiana
fijado:
devolviendo una nueva instancia para inicio/fin de semana, mes, trimestre
agregado:
local checo
agregado:
La configuración regional calendar
recibe como cierre la siguiente function(Moment $m) {}
La configuración regional relativeTime
recibe como cierre los siguientes parámetros function($count, $direction, Moment $m) {}
agregado:
cierres de paso fijos a la configuración regional (calendario, tiempo relativo)
establecer la información regional alemana correcta
agregado:
cadenas de configuración regional tailandesas fijas
agregado:
local chino tradicional
agregado:
local chino
El formateador ordinal recibe ahora el token
, por ejemplo, el token dentro dS
es d
solucionado: problema ordinal en inglés para números entre 11 y 13
añadido: configuración regional italiana
solucionado: problema ordinal en inglés
añadido: local portugués
fijado:
La configuración regional muestra un nombre de mes incorrecto (#34)
Cambió el orden de los días laborables dentro de los archivos locales.
agregado:
getNombreDíaSemanaLong()
getNombreDíaSemanaShort()
getMesNombreLong()
getMesNombreShort()
agregado:
Lugar: tailandés
agregado:
obtenerMeses()
obtenerAños()
obtenerRelativo()
Lugar
MomentoDeVo:
fijado:
getSeconds() ahora también muestra la dirección
MomentoDeVo:
fijado:
problema de zona horaria que ocurrió solo para fechas Unixtime
otro:
la dirección regresa ahora: "futuro" (-) / "pasado" (+)
los valores de tiempo ahora se escriben como flotantes
MomentoDeVo:
fijado:
zona horaria no reconocida al construir un momento
agregado:
getMomentosPorDías Semanales()
obtener día de la semana()
obtenerSemanadelAño()
otro:
texto escapado
agregado:
por ejemplo, [Hello World]
se transformará automáticamente en Hello World
por ejemplo, WS
para la semana 21 del año muestra ahora la 21th
correcta, etc.
obtener el período de un trimestre determinado en un año determinado
week
= semana del año
month
= mes del año
quarter
= trimestre del año
crear un nuevo momento mutable basado en la instancia dada
startOf y endOf implementados por moment.js
obtener el período trimestral de una fecha determinada
establecerDía()
obtenerDía()
establecerMes()
obtenerMes()
establecerAño()
obtenerAño()
obtenerCuarto()
establecerSegundo()
obtenerSegundo()
establecer Minuto()
obtenerMinuto()
establecerHora()
obtenerHora()
clonación agregada ()
Se agregó getInterval()
a MomentPeriodVo
para indicar el intervalo del período dado.
se agregó una clase estática MomentHelper
Se corrigió el cálculo ordinal interno de PHP (también en combinación con el formato moment.js).
ahora puedes escapar del texto envolviéndolo en []
remoto:
agregar()
sustraer()
agregado:
formato de calendario implementado por moment.js
fijado:
incompatibilidad con PHP 5.3
agregado:
prueba de fechas con formato YYYY-mm-dd
y YYYY-mm-ddTHH:ii:ss
lanza MomentException en fechas no válidas
Lanzamiento de excepción como MomentException
Validación de fecha al crear instancias:
agregarSegundos()
agregarMinutos()
agregarHoras()
agregarDías()
agregar Semanas()
agregarMeses()
agregaraños()
restarSegundos()
restarMinutos()
restarHoras()
restarDías()
restar Semanas()
restarMeses()
restarAños()
en desuso:
agregar()
sustraer()
Los mantenedores de este proyecto sugieren seguir la guía de contribución.
Moment.php se puede distribuir gratuitamente según los términos de la licencia MIT.
Copyright (c) 2017 Tino Ehrich
Por el presente se otorga permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para operar con el Software sin restricciones, incluidos, entre otros, los derechos de uso, copia, modificación, fusión. , publicar, distribuir, sublicenciar y/o vender copias del Software, y permitir que las personas a quienes se les proporciona el Software lo hagan, sujeto a las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO, PERO NO LIMITADO A, LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGÚN RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, AGRAVIO O DE OTRA MANERA, QUE SURJA DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRAS NEGOCIOS EN EL SOFTWARE.