formato - Clase DateTime vs. funciones de fecha nativas de PHP
strftime php (2)
Para el registro, cometí el error de usar la clase DateTime . Fue un gran error. Si bien tiene algunas características interesantes, no vale la pena el esfuerzo. Yo explico:
Digamos que tiene un formulario (con un selector de fecha) y que está almacenando en la base de datos, entonces tiene 3 formatos para representar la fecha.
- Internamente, la variable es del tipo DateTime ()
- Visualmente, la variable que se muestra al usuario es una cadena con el formato dd-mm-aaaa o mm-dd-aaaa (depende de la configuración regional)
- En la base de datos, la variable almacenada es también una cadena con el formato aaaa-mm-dd (ANSI)
Entonces, estoy tratando con 3 tipos diferentes de representación para el mismo tipo de datos
Además, digamos que desea serializar (json, xml o similar), es la serialización:
object(stdClass)#1 (1) {
["field1"]=>
object(DateTime)#2 (3) {
["date"]=>
string(26) "2018-12-02 09:14:09.216273"
["timezone_type"]=>
int(3)
["timezone"]=>
string(30) "America/Argentina/Buenos_Aires"
}
}
Es un verdadero dolor tratar de serializar. Mi alternativa es simple, almacenar cualquier fecha temporal como una cadena y la convertiré a DateTime solo si es necesario.
object(stdClass)#3 (1) {
["field1"]=>
string(19) "2018-12-02 09:14:09"
}
La clase DateTime tiene algunos métodos prácticos y parece en general superior a las funciones nativas de php date como strtotime
, mktime
y strftime
(y más). ¿Pero hay algún inconveniente o una razón por la que no debería usarlo?
La única razón por la que puedo pensar es que podría ser más costoso crear una instancia completa de una clase que solo usar una función.
- ¿Estás de acuerdo con eso?
- ¿Tiene sentido para nosotros un objeto DateTime para cosas simples?
- ¿Hay otros inconvenientes?
Parece un poco confuso cambiar entre esas dos opciones todo el tiempo, así que me gustaría tener una autorización sobre lo que preferiría hacer.
Dos ejemplos para mi decisión serían:
- Convertir una fecha a un valor localizado
- Cálculo del tiempo entre dos fechas.
Si su preocupación es que crear una instancia de clase es costoso y dificultará el rendimiento, me temo que está ladrando al árbol equivocado. Nunca se debe considerar si se debe utilizar un enfoque OO comprobado donde tenga sentido. Si tiene sentido usar la clase DateTime para realizar ciertos cálculos de fecha, entonces úselo. No es caro hasta el punto en que tu aplicación lo sentirá, a menos que hagas algo alocado, como crear 1 millón de objetos DateTime.
La razón por la que DateTime es excelente es porque alivia la preocupación por el ahorro de luz diurna al especificar la zona horaria al crear el objeto. También es fácil obtener diferencias entre fechas u obtener intervalos entre diferentes objetos. Básicamente, reduce la cantidad de preocupaciones y la codificación requerida (pero admitiré que a veces es incorrecto, con suerte se solucionará en la versión 5.4 de PHP).
En pocas palabras, siempre lo usaría.