Classe DateTime vs PHP natif date-fonctions
La classe DateTime a certainement un peu de pratique les méthodes et semble globalement supérieure à la native de PHP les fonctions de date comme strtotime
, mktime
et strftime
(et plus). Mais est-il un inconvénient ou une raison pourquoi je ne devrais pas l'utiliser ?
La seule raison pour laquelle je pense qu'il pourrait être plus coûteux de créer une instance d'une classe que de simplement en utilisant une fonction.
- Seriez-vous d'accord avec cela ?
- T-il un sens à tout pour utiliser un objet DateTime pour des choses simples?
- Existe-il d'autres inconvénients ?
Il semble un peu confus pour basculer entre ces deux options, tout le temps, donc j'aimerais avoir de l'espace ce que je préfère faire.
Deux exemples de ma décision serait:
- La conversion d'une date à une valeur localisée
- Le calcul de l'intervalle de temps entre deux dates
Vous devez vous connecter pour publier un commentaire.
Si votre souci est que la création d'une instance de classe est cher et que ça va entraver la performance, alors je crains que vous êtes aboiements le mauvais arbre. Il ne faut jamais envisager l'utilisation de la éprouvées OO approche où il fait sens. Si il est logique d'utiliser la classe DateTime pour effectuer certains calculs de date, puis l'utiliser. Ce n'est pas cher au point où votre application va le sentir en elle, sauf si vous faites quelque chose de fou comme la création de 1 million d'objets DateTime.
Pourquoi DateTime est grand, c'est parce qu'il allège le souci de l'heure d'été en spécifiant le fuseau horaire lors de la création de l'objet. Il est également facile d'obtenir des différences entre les dates ou obtenir intervalles entre les différents objets. Essentiellement, il réduit la quantité d'inquiétude et de codage (mais j'avoue que c'est à tort parfois, j'espère que c'aurez abordée dans la version 5.4 de PHP).
Bas de ligne j'avais toujours l'utiliser.
mktime
oustrtotime
fonctions - ils besoin de certains de l'ordre de paramètres représentant le jour, l'année, le mois, l'heure, etc. AvecDateTime
je me permet de créer l'objet en utilisant arbitraire de paramètres comme$date = DateTime::createFromFormat('m H:s D-Y', $weird_user_input);
qui peut ensuite être mis en forme pour le timestamp unix ou tout autre format de date que je souhaite. Je peux même préciser le fuseau horaire immédiatement lors de la création de l'objet. Donc oui, je serais certainement l'utiliser car je ne vois vraiment pas où la procédure serait m'aider mieux.date function : 4.1662380695343 DateTime class : 7.1334080696106
. Ici est le code que j'ai utilisé pour exécuter ce test (pour 1 million de boucles).unless you do something crazy such as creating 1 million DateTime objects
. Ce serait une limite pour vous? J'ai quelques milliers de reccords où je veux courir DateTime. C'est que pour beaucoup ( pour la performance / vitesse op de l'application)Pour l'enregistrement, j'ai fait l'erreur d'utiliser la classe DateTime. C'était une grosse erreur. Alors qu'il a quelques fonctionnalités intéressantes, mais il ne vaut pas la peine. Je m'explique:
Disons que vous disposez d'un formulaire (avec une date-picker) et les stocker dans la base de données, alors vous avez 3 formats pour représenter la date.
Donc, je fais affaire avec 3 différents types de représentation pour le même type de données
Aussi, disons que vous voulez serialize (json, xml ou tel), c'est la sérialisation:
C'est une vraie douleur pour essayer de sérialiser.
Mon alternative est simple, pour stocker toute temporelle date sous forme de chaîne et je vais le convertir en DateTime seulement si il est besoin.
DateTime
sur une couche de gestion. Dans les cas où il vaut la peine, je vous recommande d'utiliser différents modèles pour différentes couches. Mon point de vue, les modèles ont des chaînes pour les dates, alors que je suis en train de travailler avecDateTime
sur la couche de gestion. Je peux recommander AutomapperPlus pour la carte des entités entre les couches. Une bonne interface et de soutien. Nécessaire seulement dans les cas complexes, bien sûr.DateTime
si? En traitant avec une représentation abstraite de la date, vous êtes toujours libre deformat()
pour le cas à portée de main. Généralement, n'importe quel objet je vais sérialiser en JSON met en œuvre laJsonSerializable
interface, de sorte que je peux formater une date propriétés de la RFC date de chaînes. Pour la base de données, je vais utiliser ANSI dates, et ainsi de suite - c'est vraiment moins douloureux que d'avoir les sorts et les horodatages de partout...À l'aide de DateTime() rend le code plus lisible par rapport à l'approche procédurale de la fonction strtotime(), etc. fonctions.
vs
Sur Windows 64 bits machines de développement, PHP est toujours en 32 bits. Il donnera à vos résultats étranges pour les dates au-delà Vendredi 13 Décembre 1901 à 20:45:54 UTC au mardi 19 janvier 2038 03:14:07 UTC
https://www.php.net/manual/en/function.strtotime.php#refsect1-function.strtotime-notes
Je ne suis pas sûr de l'heure d'été est correctement géré natif de la date de fonctions de temps.
Je vous conseille d'utiliser DateTime() les fonctions date natif des fonctions du temps.