Position actuelle: Accueil> Derniers articles> Que dois-je faire si l'analyse Strptime échoue en PHP? Analyse des causes et solutions d'erreur communes

Que dois-je faire si l'analyse Strptime échoue en PHP? Analyse des causes et solutions d'erreur communes

M66 2025-06-22

Dans PHP, la fonction Strptime () est utilisée pour analyser la chaîne de date et de heure dans un formulaire de tableau et renvoyer le résultat analysé dans le format spécifié. Cette fonction est généralement très utile lors de la gestion des tâches liées à la date et au temps. Cependant, pendant le développement, Strptime () peut parfois ne pas analyser, ce qui a entraîné le retour faux , ce qui rend le débogage difficile.

Cet article explorera en profondeur les causes d'erreur courantes de la défaillance de l'analyse Strptime () et fournira des solutions correspondantes.

1. Le format d'entrée ne correspond pas

Le premier paramètre de strptime () est la chaîne de date-heure, tandis que le deuxième paramètre est la chaîne de format. Si la chaîne DateTime ne correspond pas à la chaîne formatée, strptime () ne sera pas analysé correctement et renvoie false .

Exemple d'erreur:

 <span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-string">"2025-06-17 15:30"</span></span><span>;
</span><span><span class="hljs-variable">$format</span></span><span> = </span><span><span class="hljs-string">"%Y/%m/%d"</span></span><span>;  </span><span><span class="hljs-comment">// Format incorrect</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strptime</span></span><span>(</span><span><span class="hljs-variable">$date</span></span><span>, </span><span><span class="hljs-variable">$format</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);  </span><span><span class="hljs-comment">// Sortirfalse</span></span><span>
</span></span>

Solution:

Assurez-vous que la chaîne DateTime correspond exactement à la chaîne formatée. Par exemple, si la chaîne DateTime est 2025-06-17 15:30 , la chaîne formatée doit être "% y-% m-% d% h:% m" .

 <span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-string">"2025-06-17 15:30"</span></span><span>;
</span><span><span class="hljs-variable">$format</span></span><span> = </span><span><span class="hljs-string">"%Y-%m-%d %H:%M"</span></span><span>;  </span><span><span class="hljs-comment">// Format correct</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strptime</span></span><span>(</span><span><span class="hljs-variable">$date</span></span><span>, </span><span><span class="hljs-variable">$format</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);  </span><span><span class="hljs-comment">// Analyse correcte,Résultat de retour</span></span><span>
</span></span>

2. Des drapeaux de mise en forme non pris en charge sont utilisés

Strptime () prend en charge certains drapeaux à formater standard, tels que % y , % m , % d , % h , % m , etc., mais parfois vous rencontrerez des développeurs essayant d'utiliser des drapeaux non pris en charge, ou en les utilisant des circonstances inappropriées.

Exemple d'erreur:

 <span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-string">"2025-06-17 15:30"</span></span><span>;
</span><span><span class="hljs-variable">$format</span></span><span> = </span><span><span class="hljs-string">"%G-%m-%d %H:%M"</span></span><span>;  </span><span><span class="hljs-comment">// Drapeaux de format non pris en charge à tort</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strptime</span></span><span>(</span><span><span class="hljs-variable">$date</span></span><span>, </span><span><span class="hljs-variable">$format</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);  </span><span><span class="hljs-comment">// Sortirfalse</span></span><span>
</span></span>

Solution:

Lorsque vous utilisez Strptime () , assurez-vous d'utiliser les drapeaux de mise en forme standard pris en charge par PHP. Si l'analyse de format de date plus complexe est requise, envisagez d'utiliser DateTime :: CreateFromFromat () au lieu de Strptime () .

 <span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-string">"2025-06-17 15:30"</span></span><span>;
</span><span><span class="hljs-variable">$format</span></span><span> = </span><span><span class="hljs-string">"%Y-%m-%d %H:%M"</span></span><span>;  </span><span><span class="hljs-comment">// Format correct</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strptime</span></span><span>(</span><span><span class="hljs-variable">$date</span></span><span>, </span><span><span class="hljs-variable">$format</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);  </span><span><span class="hljs-comment">// Analyse correcte,Résultat de retour</span></span><span>
</span></span>

3. Anomalie des données d'entrée

Parfois, la chaîne DateTime elle-même peut contenir des caractères inappropriés, ce qui fait que Strptime () est incapable d'analyser. Par exemple, une chaîne contient des espaces supplémentaires ou des pièces de date non valides.

Exemple d'erreur:

 <span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-string">"2025-06-17  15:30"</span></span><span>;  </span><span><span class="hljs-comment">// La chaîne de date a des espaces supplémentaires</span></span><span>
</span><span><span class="hljs-variable">$format</span></span><span> = </span><span><span class="hljs-string">"%Y-%m-%d %H:%M"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strptime</span></span><span>(</span><span><span class="hljs-variable">$date</span></span><span>, </span><span><span class="hljs-variable">$format</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);  </span><span><span class="hljs-comment">// Sortirfalse</span></span><span>
</span></span>

Solution:

Avant de passer Strptime () , assurez-vous de nettoyer des espaces supplémentaires ou des caractères non valides, ou de conserver des données cohérentes lorsqu'elle est utilisée.

 <span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-string">"2025-06-17  15:30"</span></span><span>;
</span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-title function_ invoke__">trim</span></span><span>(</span><span><span class="hljs-variable">$date</span></span><span>);  </span><span><span class="hljs-comment">// Effacer les espaces supplémentaires</span></span><span>
</span><span><span class="hljs-variable">$format</span></span><span> = </span><span><span class="hljs-string">"%Y-%m-%d %H:%M"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strptime</span></span><span>(</span><span><span class="hljs-variable">$date</span></span><span>, </span><span><span class="hljs-variable">$format</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);  </span><span><span class="hljs-comment">// Analyse correcte,Résultat de retour</span></span><span>
</span></span>

4. Problème de réglage du fuseau horaire

Le comportement d'analyse de la fonction Strptime () peut être affecté par le lieu du système. Si les paramètres régionaux du système ne correspondent pas à la langue / région de la chaîne de date, cela peut entraîner l'échec de l'analyse.

Exemple d'erreur:

 <span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-string">"17 Juin 2025 15:30"</span></span><span>;  </span><span><span class="hljs-comment">// Date française</span></span><span>
</span><span><span class="hljs-variable">$format</span></span><span> = </span><span><span class="hljs-string">"%d %b %Y %H:%M"</span></span><span>;    </span><span><span class="hljs-comment">// Mois français</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strptime</span></span><span>(</span><span><span class="hljs-variable">$date</span></span><span>, </span><span><span class="hljs-variable">$format</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);  </span><span><span class="hljs-comment">// Sortirfalse</span></span><span>
</span></span>

Solution:

Assurez-vous que lorsque vous utilisez Strptime () , le lieu du système est défini ou vérifié de manière appropriée, en particulier lorsque la chaîne de date contient le mois ou la semaine. Les paramètres régionaux actuels peuvent être ajustés via la fonction SetLocale () .

 <span><span><span class="hljs-title function_ invoke__">setlocale</span></span><span>(LC_TIME, </span><span><span class="hljs-string">'fr_FR.UTF-8'</span></span><span>);  </span><span><span class="hljs-comment">// Se mettre en français</span></span><span>
</span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-string">"17 Juin 2025 15:30"</span></span><span>;
</span><span><span class="hljs-variable">$format</span></span><span> = </span><span><span class="hljs-string">"%d %b %Y %H:%M"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strptime</span></span><span>(</span><span><span class="hljs-variable">$date</span></span><span>, </span><span><span class="hljs-variable">$format</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);  </span><span><span class="hljs-comment">// Analyse correcte,Résultat de retour</span></span><span>
</span></span>

5. Utilisez la classe DateTime de PHP comme alternative

Bien que Strptime () ait son utilité, ses fonctions et sa flexibilité sont légèrement insuffisantes par rapport à la classe DateTime de PHP. Si vous rencontrez le problème de la rupture de la résolution Strptime () plusieurs fois, vous pouvez envisager d'utiliser la méthode DateTime :: createFromFromAt () , qui fournit une fonction de résolution de date plus puissante.

Exemple:

 <span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-string">"2025-06-17 15:30"</span></span><span>;
</span><span><span class="hljs-variable">$format</span></span><span> = </span><span><span class="hljs-string">"Y-m-d H:i"</span></span><span>;  </span><span><span class="hljs-comment">// utiliserDateTimeAnalyse</span></span><span>
</span><span><span class="hljs-variable">$datetime</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-variable">$format</span></span><span>, </span><span><span class="hljs-variable">$date</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$datetime</span></span><span>) {
    </span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$datetime</span></span><span>);  </span><span><span class="hljs-comment">// Sortir日期对象</span></span><span>
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Analyse失败"</span></span><span>;
}
</span></span>

La méthode DateTime :: CreateFromFormat () prend en charge non seulement un format plus large, mais fournit également plus de fonctions de traitement des erreurs, ce qui le rend plus pratique pour les développeurs.

Résumer

Lorsque vous utilisez Strptime () , les raisons courantes de la défaillance de l'analyse incluent le décalage du format, l'utilisation d'indicateurs de formatage non pris en charge, les exceptions de données d'entrée, les problèmes de paramètres du domaine, etc. Pour les exigences d'analyse de date plus complexes, la classe DateTime est une alternative plus moderne et plus puissante.