Add a UTC-normalizing DateTime method for ISO 8601 output
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- C
- Estrellas
- 40.4k
- Forks
- 8.2k
- Merge medio
- 2 d 13 h
- PR fusionados (30 d)
- 96
Descripción
Update: Based on feedback, this proposal no longer focuses on adding a
format constant. The preferred direction under discussion is a method that
normalizes the represented instant to UTC and returns ISO 8601 output with
millisecond precision and aZsuffix. Check this comment : https://github.com/php/php-src/issues/23491#issuecomment-5464152132
Spoiler old proposal
## DescriptionPHP provides predefined date format constants such as DATE_ISO8601,
DATE_ATOM, DATE_RFC3339, and DATE_RFC3339_EXTENDED. There is no predefined
format for the UTC timestamp commonly produced by JavaScript:
1970-01-01T00:00:00.000Z
For example:
new Date(0).toISOString();
// "1970-01-01T00:00:00.000Z"
Proposal
Add a predefined format for ISO 8601 timestamps with millisecond precision.
One possible name is:
DATE_ISO8601_MILLISECONDS_UTC
DateTimeInterface::ISO8601_MILLISECONDS_UTC
with the format string:
"Y-m-d\\TH:i:s.v\\Z"
The name and API shape are open for discussion.
An alternative is an offset-preserving format:
DATE_ISO8601_MILLISECONDS
DateTimeInterface::ISO8601_MILLISECONDS
using:
"Y-m-d\\TH:i:s.vP"
Example
$date = new DateTimeImmutable('@0');
echo $date->setTimezone(new DateTimeZone('UTC'))
->format(DATE_ISO8601_MILLISECONDS_UTC);
// 1970-01-01T00:00:00.000Z
As with the existing date format constants, formatting does not change the
timezone of the DateTime object. The caller must convert it to UTC before
using the _UTC format.
Existing constant
DATE_RFC3339_EXTENDED already includes milliseconds, but produces an offset:
1970-01-01T00:00:00.000+00:00
This is semantically equivalent to Z for UTC, but is not byte-for-byte
compatible with JavaScript's Date.prototype.toISOString().
Related discussion
PHP issue #14593 discusses the
interpretation of the Z suffix when parsing DateTime values. That issue is
about parsing and timezone representation; this proposal is about predefined
formatting constants in ext/date.
Questions
- Is a millisecond-precision constant useful in addition to
DATE_RFC3339_EXTENDED? - Should the format preserve the object's offset, or provide the
Zform for
UTC-normalized values? - What name and API shape should be used?
- Would both forms introduce unnecessary overlap with the existing constants?
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Empieza revisando las constantes existentes de formato de fecha y el comportamiento de DateTime en ext/date, especialmente DATE_RFC3339_EXTENDED y la conversión a UTC. Lee el comentario enlazado para entender la dirección preferida del método; se considera terminado cuando la forma de la API esté acordada y el método produzca una salida ISO 8601 normalizada a UTC con precisión de milisegundos y un sufijo Z.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- php
- Área
- backend
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Activo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 45/100