Position actuelle: Accueil> Derniers articles> Lorsque vous utilisez fputcsv pour écrire des champs avec le format de date et d'heure, comment les formater pour les enregistrer correctement?

Lorsque vous utilisez fputcsv pour écrire des champs avec le format de date et d'heure, comment les formater pour les enregistrer correctement?

M66 2025-08-05

1. Le problème se pose

La fonction FputCSV sortira les données d'un fichier sous forme de virgule séparée. Étant donné que le fichier CSV est essentiellement un format de texte brut, tous les champs sont enregistrés sous forme de chaînes. Par conséquent, si nous écrivons directement un objet ou un champ DateTime contenant DateTime dans le fichier CSV, nous pouvons rencontrer les problèmes suivants:

  1. Format incohérent : Lorsqu'un système ou un programme différent lit un fichier CSV, le format du champ Date et Heure peut ne pas être correctement identifié.

  2. Perte de données ou erreurs : certains formats de date-temps peuvent perdre la précision lorsqu'ils sont enregistrés, en particulier les dates contenant des informations de fuseau horaire.

Pour éviter ces problèmes, les champs de date et d'heure doivent être formatés raisonnablement avant l'écriture.


2. La clé de mise en forme à ce jour et l'heure

Lors de l'écriture de champs contenant DateTime à l'aide de fputcsv , la pratique la plus courante consiste à utiliser la méthode de format de l'objet DateTime pour convertir DateTime en format de chaîne cohérent. Par exemple, le format ISO 8601 ( YMD H: I: S ) est généralement un choix universel et hautement compatible.

1. Date et heure du format à l'aide de l'objet DateTime

Supposons que nous ayons un objet DateTime et que nous voulions l'écrire dans un fichier CSV, nous pouvons utiliser le code suivant:

 <span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTime</span></span><span>();
</span><span><span class="hljs-variable">$formattedDate</span></span><span> = </span><span><span class="hljs-variable">$date</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">format</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);  </span><span><span class="hljs-comment">// Formaté comme '2025-07-27 14:45:00'</span></span><span>
</span></span>

Cela formate la DateTime actuelle comme une chaîne de Yyyy-mm-dd HH: MM: SS .

2. Chaînes de format manuellement

Si le champ DateTime est de type de chaîne (comme obtenu à partir de la base de données), nous pouvons également utiliser la méthode DateTime :: CreateFromFromFromat pour convertir et formater la date. Par exemple:

 <span><span><span class="hljs-variable">$dateString</span></span><span> = </span><span><span class="hljs-string">'2025-07-27 14:45:00'</span></span><span>;
</span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-title class_">DateTime</span></span><span>::</span><span><span class="hljs-title function_ invoke__">createFromFormat</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>, </span><span><span class="hljs-variable">$dateString</span></span><span>);
</span><span><span class="hljs-variable">$formattedDate</span></span><span> = </span><span><span class="hljs-variable">$date</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">format</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);
</span></span>

3. Utilisez fputcsv pour écrire des fichiers CSV

Ensuite, regardons comment rédiger la date et l'heure formatées dans un fichier CSV lors de l'utilisation de fputcsv . Supposons que nous ayons un tableau avec plusieurs champs, dont l'un est un champ DateTime.

 <span><span><span class="hljs-variable">$data</span></span><span> = [
    [</span><span><span class="hljs-string">'Name'</span></span><span>, </span><span><span class="hljs-string">'Date'</span></span><span>, </span><span><span class="hljs-string">'Amount'</span></span><span>],
    [</span><span><span class="hljs-string">'John Doe'</span></span><span>, </span><span><span class="hljs-string">'2025-07-27 14:45:00'</span></span><span>, </span><span><span class="hljs-number">1000</span></span><span>],
    [</span><span><span class="hljs-string">'Jane Smith'</span></span><span>, </span><span><span class="hljs-string">'2025-07-28 09:30:00'</span></span><span>, </span><span><span class="hljs-number">1500</span></span><span>]
];

</span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'data.csv'</span></span><span>, </span><span><span class="hljs-string">'w'</span></span><span>);

</span><span><span class="hljs-comment">// Écrivez sur la ligne de titre</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fputcsv</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-variable">$data</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]);

</span><span><span class="hljs-comment">// Écrire des lignes de données,Et assurez-vous que la date est formatée correctement</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$data</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$row</span></span><span>) {
    </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>] = (</span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTime</span></span><span>(</span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>]))-&gt;</span><span><span class="hljs-title function_ invoke__">format</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);  </span><span><span class="hljs-comment">// Champ de date de format</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">fputcsv</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-variable">$row</span></span><span>);
}

</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
</span></span>

Dans cet exemple, la deuxième colonne ( date ) est un champ de date-heure. Avant d'écrire dans le fichier, nous formons la date du formulaire YMD H: I: S à l'aide de la méthode de format de l'objet DateTime . De cette façon, quel que soit le système que vous lisez le fichier CSV, la date restera dans un format cohérent, réduisant le problème des formats incohérents.


4. Choses à noter

  1. Problème de fuseau horaire : Si votre date et votre délai contiennent des informations de fuseau horaire, il est recommandé d'utiliser le format ISO 8601 ( YMD \ Th: i: SP ), où P sortira les informations de fuseau horaire. Par exemple: 2025-07-27T14: 45: 00 + 00: 00 . Assurez-vous de gérer correctement le fuseau horaire pendant la mise en forme pour éviter les problèmes causés par la conversion du fuseau horaire.

  2. Encodage du fichier CSV : assurez-vous que le format de codage correct est utilisé lors de l'enregistrement du fichier CSV. Le codage UTF-8 est recommandé pour s'assurer que les caractères spéciaux (comme le chinois) peuvent être enregistrés correctement.

  3. Vérification de validité de la date-heure : Avant le formatage, il est préférable de vérifier la validité de la chaîne de date d'heure pour éviter les dates invalides (par exemple, 2025-02-30 ) provoquant des erreurs de mise en forme.