La date de création — created_at — est la métadonnée qui horodate le tout premier instant d’existence d’une ressource : une ligne en base, un fichier, un enregistrement. Simple en apparence, elle conditionne l’audit, la conformité RGPD et le débogage de toute application. Voici comment la définir et l’implémenter proprement, langage par langage.
updated_at).- Formats courants : ISO 8601 (
2026-04-23T10:15:30Z) ou timestamp Unix (1777176930) - En base relationnelle, colonne
NOT NULLavec valeur par défaut automatique - Tous les langages majeurs (SQL, JS, Python, PHP) et la plupart des ORM la génèrent nativement
- Ne doit jamais être modifiable après écriture : c’est un invariant, pas un champ éditable
Plan de l'article
- Qu’est-ce que la date de création ?
- Pourquoi tracer la date de création
- Implémenter created_at, langage par langage
- Les ORM et frameworks gèrent created_at automatiquement
- Côté système : la date de création des fichiers
- Fuseaux horaires et UTC
- Garantir l’immutabilité et l’intégrité
- Bonnes pratiques pour vos colonnes created_at
- Pour aller plus loin
Qu’est-ce que la date de création ? #
La date de création (ou creation date, created_at) correspond à l’instant précis où une ressource a été générée pour la première fois dans un système.
2026-04-23T10:15:30Z1777176930updated_at)Pourquoi tracer la date de création #
Plusieurs cas d’usage justifient l’enregistrement systématique de cette information.
À lire User Creation Linux : Guide 2026 – Tutoriel
- Audit — savoir qui a créé quoi et quand
- Conformité RGPD — durée de conservation des données
- Analytics — analyse de cohorte
- Tri — ordre chronologique, flux, timelines
- Débogage — corrélation temporelle des incidents
Implémenter created_at, langage par langage #
SQL : la colonne created_at
Dans une base relationnelle, la date de création est quasi-standard.
CREATE TABLE users ( id INT PRIMARY KEY, email VARCHAR(255), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
| SGBD | Déclaration |
|---|---|
| MySQL | TIMESTAMP DEFAULT CURRENT_TIMESTAMP |
| PostgreSQL | TIMESTAMPTZ DEFAULT NOW() |
| SQL Server | DATETIME2 DEFAULT SYSDATETIME() |
| SQLite | DATETIME DEFAULT CURRENT_TIMESTAMP |
Pour aller plus loin sur la création d’une structure de table complète, voir notre tutoriel sur la création d’une table MySQL.
JavaScript / Node.js
Plusieurs méthodes permettent de générer une date de création.
const createdAt = new Date().toISOString(); // "2026-04-23T10:15:30.123Z"
- new Date() — objet Date natif
- Date.now() — timestamp en millisecondes
- toISOString() — format ISO 8601
- dayjs / luxon — bibliothèques recommandées pour la manipulation de dates
Python
Le module datetime est la référence.
À lire Convertir un fichier MOV en AVI : Guide complet pour changer de format vidéo facilement
from datetime import datetime, timezone created_at = datetime.now(timezone.utc).isoformat()
- datetime.now() — heure locale
- datetime.now(timezone.utc) — UTC recommandé
- time.time() — timestamp float
- pendulum — librairie moderne optionnelle
PHP
Le langage web dispose également d’outils natifs.
- date(‘c’) — format ISO 8601
- new DateTime() — objet DateTime
- Carbon — librairie populaire héritée de Laravel
- strtotime — parsing de chaînes
Les ORM et frameworks gèrent created_at automatiquement #
Les ORM gèrent la date de création sans code manuel, via une simple annotation ou un réglage.
| Framework | Annotation / réglage |
|---|---|
| Laravel | $timestamps = true |
| Symfony | @Gedmo\Timestampable(on="create") |
| Rails | timestamps dans schema.rb |
| Django | DateTimeField(auto_now_add=True) |
| Hibernate | @CreatedDate |
| Prisma | @default(now()) |
Côté système : la date de création des fichiers #
Les systèmes d’exploitation stockent eux aussi une date de création pour chaque fichier.
statls -lUCes mécanismes système comptent parmi les premiers réflexes à connaître quand on administre soi-même ses serveurs — voir aussi notre guide sur la création d’un utilisateur sous Linux en ligne de commande.
À lire Création User Linux : Guide Complet Commandes
Fuseaux horaires et UTC #
Toujours stocker en UTC, afficher selon le fuseau de l’utilisateur.
- Stockage — UTC uniquement en base
- Affichage — conversion côté client ou serveur
- Piège — heure d’été, DST, changements législatifs de fuseau
- Librairies recommandées — luxon, date-fns-tz
Garantir l’immutabilité et l’intégrité #
La date de création doit être protégée contre toute modification ultérieure.
- Trigger SQL —
BEFORE UPDATEpour empêcher la modification - Hook ORM — champ en lecture seule après la persistance
- Journal d’audit — tracer toute tentative de changement
- Hash — intégrer
created_atdans le hash d’intégrité
Bonnes pratiques pour vos colonnes created_at #
- Colonne obligatoire — jamais NULL, toujours
NOT NULL - Valeur par défaut —
CURRENT_TIMESTAMPou équivalent - Indexation — si le tri est fréquent, créez un index
- Précision — au minimum la seconde, idéalement la microseconde
- Rétention — définissez une politique d’archivage
- Immuable : une fois écrite,
created_atne doit plus jamais changer. - UTC en base, conversion au fuseau local uniquement à l’affichage.
- NOT NULL + valeur par défaut automatique dès la création de la ligne.
- Presque tous les ORM (Laravel, Django, Symfony, Rails, Prisma, Hibernate) la génèrent sans code manuel.
- Distincte de
updated_at: l’une raconte l’origine, l’autre l’évolution.
Pour aller plus loin #
created_at et updated_at : quelle différence ?
created_at ne change jamais après la première écriture : elle raconte l’origine de la ressource. updated_at est mise à jour à chaque modification et raconte son évolution.Faut-il stocker created_at en UTC ou en heure locale ?
Peut-on modifier une date de création après coup ?
BEFORE UPDATE côté base ou un hook en lecture seule côté ORM permet de bloquer toute tentative de modification.Quelle précision choisir pour created_at ?
Les ORM génèrent-ils created_at automatiquement ?
$timestamps, Django via auto_now_add=True, Symfony via l’extension Gedmo Timestampable, Rails via les timestamps du schéma, Prisma via @default(now()).Les systèmes de fichiers ont-ils aussi une date de création ?
ls -lU, et Linux ext4 la stocke sous le nom de btime, consultable avec la commande stat.La date de création est un élément fondamental de toute architecture logicielle propre. SQL, JavaScript, Python, PHP : tous les langages et frameworks disposent d’outils natifs pour la gérer. Stockez-la toujours en UTC, protégez son immutabilité, et laissez l’ORM automatiser sa génération. Cette rigueur paiera en audit, en débogage et en analyse pendant toute la durée de vie de vos applications.




