Maison >développement back-end >tutoriel php >Explication du principe de la fonction time strtotime() en PHP

Explication du principe de la fonction time strtotime() en PHP

不言
不言original
2018-08-06 15:01:152404parcourir

Cet article vous présente le principe de la fonction time strtotime() en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Certaines personnes sont souvent confuses lorsque strtotime est combiné avec -1 mois, +1 mois, le mois prochain, et elles ont alors l'impression que cette fonction est un peu peu fiable et peut causer des problèmes à chaque instant lors de son utilisation, Je vais être très paniqué...

Non, quelqu'un vient de me redemander :

// 今天是2018-07-31 执行代码:date("Y-m-d",strtotime("-1 month"))// 怎么输出是2018-07-01?

D'accord, même si cette question semble déroutante, en terme de logique interne, en fait c'est "vrai" ", ne vous inquiétez pas, laissez-moi vous expliquer lentement :

Simulons la logique de traitement interne de la date pour ce genre de chose :

1. Faites-le d'abord - 1 mois, puis est actuellement 31-07, et après en avoir soustrait un, il est 31-06

2. Faites une normalisation de la date, car il n'y a pas de 31 en juin, donc c'est comme si 2h60 était égal à 3 : 00. Le 31 juin est égal au 1er juillet
La logique est-elle très "claire" ? On peut aussi vérifier manuellement la deuxième étape, comme :

var_dump(date("Y-m-d", strtotime("2017-06-31")));// 输出2017-07-01

Autrement dit, tant qu'il s'agit du dernier jour du grand et du petit mois, il peut Quelle que soit cette confusion, nous pouvons également facilement vérifier d'autres mois similaires pour confirmer cette conclusion :

var_dump(date("Y-m-d", strtotime("-1 month", strtotime("2017-03-31"))));// 输出2017-03-03
var_dump(date("Y-m-d", strtotime("+1 month", strtotime("2017-08-31"))));// 输出2017-10-01
var_dump(date("Y-m-d", strtotime("next month", strtotime("2017-01-31"))));// 输出2017-03-03
var_dump(date("Y-m-d", strtotime("last month", strtotime("2017-03-31"))));// 输出2017-03-03

Que devons-nous faire ?

À partir de PHP5.3, la date a ajouté une série de corrections Phrases pour clarifier ce problème, c'est-à-dire "premier jour de" et "dernier jour de", c'est-à-dire que vous pouvez limiter la date afin que la date ne soit pas automatiquement "normalisée" :

var_dump(date("Y-m-d", strtotime("last day of -1 month", strtotime("2017-03-31"))));//输出2017-02-28
var_dump(date("Y-m-d", strtotime("first day of +1 month", strtotime("2017-08-31"))));////输出2017-09-01
var_dump(date("Y-m-d", strtotime("first day of next month", strtotime("2017-01-31"))));////输出2017-02-01
var_dump(date("Y-m-d", strtotime("last day of last month", strtotime("2017-03-31"))));////输出2017-02-28

Si est antérieur à la version 5.3 (est-ce que quelqu'un l'utilise encore ?), vous pouvez utiliser mktime ou similaire pour ignorer tous les jours, par exemple, les limiter simplement au 1er de chaque mois, mais ce n'est pas aussi élégant que d'utiliser directement le premier jour.

Maintenant que vous avez compris les principes internes, vous ne paniquez plus ?

Articles connexes recommandés :

fonction isset() et fonction empty() en php Analyse de fonctions et comparaison simple

Quelles sont les opérations des fonctions de tableau PHP ? Application de la fonction tableau php (avec code)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn