148 votes

Vous obtenez un horodatage pour aujourd'hui à minuit ?

Comment faire pour obtenir un horodatage en php pour aujourd'hui à minuit. Disons qu'il est lundi 17 heures et que je veux l'horodatage du lundi (aujourd'hui) à minuit (12 heures), ce qui est déjà arrivé.

Merci.

290voto

hakre Points 102271
$timestamp = strtotime('today midnight');

ou via un DateTime :

$date = new DateTime('today midnight');
// or: $date = date_create('today midnight');
$timestamp = $date->getTimestamp();

et ensuite peut-être immuable :

$midnight = new DateTimeImmutable('today midnight');
// or: $midnight = date_create_immutable('today midnight');
$timestampOfMidnight = $midnight->getTimestamp();
  1. C'est dans le fuseau horaire par défaut .
  2. Spoiler : juste " midnight "ou simplement " today " retourner la même chose.
  3. Ajoutez un fuseau horaire, par exemple " UTC today ", pour l'avoir, toujours.
  4. Spoiler #2 : Style de salutation UTC : " midnightZ "
  5. Histoire : midnight est depuis PHP 5.1.2 (janvier 2006), today depuis PHP 4.3.1 (février 2003)

Plus d'exemples :

étant donné le temps UTC 2020-01-01 00:00:00 :

UTC time is ............: [red   ] 1577836800

lors de l'appel strtotime($) les résultats sont :

today midnight .........: [pink  ] 1577833200
midnight ...............: [pink  ] 1577833200
today ..................: [pink  ] 1577833200
tomorrow ...............: [green ] 1577919600
UTC today ..............: [red   ] 1577836800
today Z ................: [red   ] 1577836800
Asia/Shanghai today ....: [lime  ] 1577808000
Asia/Shanghai ..........: [blue  ] 1577811600
HKST today .............: [copper] 1577804400

Démonstration en ligne : https://3v4l.org/KWFJl


Documentation PHP :

  • Sur le Formats relatifs voir la page Notations basées sur les jours table. Ces formats sont destinés à strtotime() , DateTime et date_create() .

  • Vous pourriez vouloir jeter un coup d'œil à ce que PHP a de plus à offrir : https://php.net/datetime - la page d'entrée des fonctions et objets liés à la date et à l'heure en PHP, avec des liens vers d'autres extensions liées à la date et à l'heure.


NOTE : Alors que " midnight " étant techniquement entre deux jours, le voici " today "(début de la journée) avec les PHP'. strtotime .

Discussion :

Jusqu'à présent, la réponse strtotime("today midnight") ou strtotime("midnight today") est une réponse complète et bien conçue pour PHP, elle peut paraître un peu verbeuse comme strtotime("midnight") et strtotime("today") renvoient le même résultat.

Mais même en étant plus verbeux, on ne répond pas toujours instantanément à la question s'il s'agit de l'option Minuit pour début de la journée ou le Minuit pour fin de journée même aujourd'hui est donné comme contexte. Nous pouvons penser au début de la journée en lisant "aujourd'hui minuit" mais il s'agit d'une hypothèse, qui n'est pas précise et qui ne peut peut-être pas l'être. Wikipedia :

Bien qu'il n'y ait pas d'unanimité mondiale sur la question, le plus souvent, minuit est considéré comme le début d'une nouvelle journée et est associé à l'heure 00:00.

Comparez avec cette question de programmation :

  • Étant donné que minuit est un transition temporelle
  • En demandant un seul horodatage UNIX
  • Alors il n'y a pas de réponse

(ce serait entre deux horodatages UNIX, donc vous prendriez deux horodatages et décririez ce que les deux signifient et cela ne répondrait pas à la question car elle demande un seul horodatage).

Il n'est pas facile de résoudre complètement ce problème en raison de ce décalage et de la manière dont UNIX Time référence la date et l'heure.

Prenons l'exemple bien connu de l'horloge numérique de 24 heures, avec les heures et les minutes, et exprimons les éléments suivants minuit (est-ce plus précis ?) :

$midnight = strtotime("today 00:00");

ou pour la fin de la journée :

$midnight = strtotime("today 24:00");

(NOTE : indiqué comme le début du jour suivant)

Ou l'horloge de 12 heures, elle peut également être utilisée pour donner le Horodatage UNIX de aujourd'hui à minuit :

$midnight = strtotime("12:00 a.m.");

(NOTE : le "12 minuit" n'est pas prise en charge par strtotime() )

La confusion qui peut résulter d'une temps de transition comme Minuit à la carte sur une horloge peut même devenir plus visible avec l'horloge de 12 heures comme similaire à " midnight " le midi (non disponible en PHP comme format de date/heure relative mais " noon ") se situe techniquement entre à nouveau (maintenant entre deux dates complètes à midi, ou entre la première et la seconde moitié d'une journée).

Comme cela s'additionne, le code n'est probablement pas bien reçu sur une horloge de 24 heures ou en écrivant simplement " today midnight ".

Votre kilométrage peut varier.

C'est en quelque sorte aligné avec temps d'horloge . De Wikipédia Minuit :

"Minuit est le temps de transition d'un jour à l'autre - le moment lorsque le changements de date sur l'heure officielle locale de toute juridiction particulière. Selon l'heure de l'horloge, minuit est l'opposé de midi, il en diffère de 12 heures. [gras par moi]"

et de la _Wikipédia horloge de 12 heures_ :

" Il n'est pas toujours évident de savoir ce que signifient les heures " 12 h " et " 12 h ". À partir des mots latins meridies (midi), ante (avant) et post (après), le terme ante meridiem (a.m.) signifie avant midi et post meridiem (p.m.) signifie après midi. Puisque "midi" (midday, meridies (m.)) n'est ni avant ni après lui-même, les termes a.m. et p.m. ne s'appliquent pas. Bien que "12 m." ait été suggéré comme moyen d'indiquer midi, cela est rarement fait et ne résout pas non plus la question de savoir comment indiquer minuit."

82voto

Joe Meyer Points 839

Je pense que vous devriez utiliser le nouvel objet DateTime de PHP, car il n'a pas de problème pour faire des dates au-delà des restrictions 32 bits que strtotime() a. Voici un exemple de la façon dont vous pouvez obtenir la date d'aujourd'hui à minuit.

$today = new DateTime();
$today->setTime(0,0);

Si vous utilisez PHP 5.4 ou une version ultérieure, vous pouvez le faire de cette façon :

$today = (new DateTime())->setTime(0,0);

Vous pouvez alors utiliser le echo $today->format('Y-m-d'); pour obtenir le format que vous souhaitez pour la sortie de votre objet.

Objet DateTime en PHP

22voto

bearcat Points 41

Aujourd'hui à minuit. Facile.

$stamp = mktime(0, 0, 0);

8voto

Full Decent Points 4453

Vous cherchez à calculer l'heure de l'événement céleste le plus récent où le soleil est passé directement sous vos pieds, ajustée pour les conventions locales de marquage de midi et aussi potentiellement ajustée pour que les gens aient assez de lumière du jour après être rentrés du travail, et pour d'autres considérations politiques.

Impressionnant, non ? En fait, il s'agit d'un problème courant, mais la réponse complète dépend de l'endroit où l'on se trouve :

$zone = new \DateTimeZone('America/New_York'); // Or your own definition of “here”
$todayStart = new \DateTime('today midnight', $zone);
$timestamp = $todayStart->getTimestamp();

Les définitions potentielles du terme "ici" sont énumérées à l'adresse suivante https://secure.php.net/manual/en/timezones.php

6voto

aspile Points 371

Réponse actualisée le 19 avril 2020

Nous pouvons simplement le faire :

$today = date('Y-m-d 00:00:00');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X