Vous avez un horodatage pour aujourd'hui à minuit?


123

Comment pourrais-je obtenir un horodatage en php pour aujourd'hui à minuit. Disons que c'est lundi 17h et que je veux l'horodatage du lundi (aujourd'hui) à minuit (minuit), ce qui est déjà arrivé.

Je vous remercie


Minuit n'est ni am ni pm. Techniquement également, aucun horodatage pour minuit n'existe.
hakre

16
@hakre je ne suis pas d'accord avec vous. Minuit est am et quel que soit le format d'un horodatage, il existe une valeur pour minuit.
G-Nugget

1
si 00:00:00 considéré aujourd'hui ou demain. Minuit aujourd'hui, est derrière nous, à presque tout moment, techniquement. Vous voulez 23:59:59 de "ce soir" ou 00:00:00 "minuit d'aujourd'hui, qui est demain", plus ou moins.
mercredi

5
une heure de 00:00:00 serait minuit d'aujourd'hui, comme dans le temps qu'il faut pour arriver à 00:00:00 qui s'est déjà produit. où 23:59:59 serait ce soir. Si vous parlez en termes d'aujourd'hui. Minuit est AM.
Nazca

4
00h00 est minuit en début de journée, 24h00 est minuit en fin de journée. Pour plus de simplicité cependant, la plupart des horloges numériques sautent 24h00 - déclarant que minuit est le début d'une nouvelle journée. Le 8 février 24h00 et le 9 février 00h00 correspondent en pratique au même moment.
Johan le

Réponses:


239
$timestamp = strtotime('today midnight');

Vous voudrez peut-être jeter un coup d'œil à ce que PHP a à offrir: http://php.net/datetime


52
@SamHuckaby: C'est encore plus simple: il $timestamp = strtotime('today');est minuit. Mais pssst celui ci-dessus semble plus cool en tant que réponse à la question;)
hakre

En fait, je dois commencer aujourd'hui et minuit aujourd'hui. Comment puis-je trouver le début d'aujourd'hui, je veux dire pour 00:00:00
Happy Coder

3
@AlwinAugustin: Vous devriez envisager de différer votre formulation. Minuit est techniquement entre deux jours. Il n'y a donc plus "aujourd'hui plus". Aussi: Midgnight d'aujourd'hui (par définition) est (juste avant) le début d'aujourd'hui. Vous voulez probablement dire le prochain minuit après midi d'aujourd'hui .
hakre

ouais en fait ce dont j'ai besoin est 00:00:00 d'aujourd'hui et 23:59:59 d'aujourd'hui
Happy Coder

2
Gardez à l'esprit que cela produira le minuit du fuseau horaire de votre serveur PHP, pas UTC + 0 ! Pour obtenir UTC + 0, vous pouvez utiliser strtotime('today+00:00').
mae

73

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

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

Ou 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);

Ensuite, vous pouvez utiliser le echo $today->format('Y-m-d');pour obtenir le format dans lequel vous souhaitez que votre objet s'affiche.

Objet PHP DateTime


14
Je préfère également utiliser le nouvel objet DateTime. Si vous combinez cette réponse avec @ hakr vous obtenez:, ce new DateTime('today midnight')qui rend l'intention plus claire (mais c'est bien sûr une question de goût).
Martijn

1
Je fais du travail ORM SQL et j'ai dû utiliser l'objet DateTime pour les comparaisons. Ceci est exactement ce que je cherchais. +1
NobleUplift

Peut être$today = new DateTime('today')
ProgZi

Également utile si vous utilisez Carbon, qui hérite de DateTime. Ainsi, vous pouvez également faire new Carbon('today midnight')et ensuite vous pouvez utiliser tous les trucs de Carbon comme ->subDays(6). Voir carbon.nesbot.com
Christopher K.

Concernant la restriction 32 bits: Le docu PHP pour strtotime déclare : "Pour les versions 64 bits de PHP, la plage valide d'un horodatage est effectivement infinie, car 64 bits peuvent représenter environ 293 milliards d'années dans les deux sens." Donc, cela ne s'applique qu'au php 32 bits.
Christopher K.

19

Aujourd'hui à minuit. Facile.

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

7

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 haut midi et également potentiellement ajustée pour que les gens aient suffisamment de lumière du jour après le retour du travail, et pour autres considérations politiques.

C'est intimidant, non? En fait, c'est un problème courant, mais la réponse complète dépend de l'emplacement:

$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 de «ici» sont répertoriées sur https://secure.php.net/manual/en/timezones.php


Comme strtotime('America/New_York today midnight');? - 3v4l.org/I85qD
hakre

5
$today_at_midnight = strtotime(date("Ymd"));

devrait vous donner ce que vous recherchez.

explication

Ce que j'ai fait, c'est d'utiliser la fonction de date de PHP pour obtenir la date du jour sans aucune référence à l'heure, puis de la passer à la fonction 'string to time' qui convertit une date et une heure en horodatage d'époque. S'il n'y a pas d'heure, il prend la première seconde de la journée.

Références: Fonction de date: http://php.net/manual/en/function.date.php

Chaîne à l'heure: http://us2.php.net/manual/en/function.strtotime.php


horodatage? C'est juste une date.
mercredi

Y a-t-il un format particulier que le PO a demandé? Si tel est le cas, je serais heureux de modifier mon message pour renvoyer le format souhaité.
SamHuckaby

complètement négligé strtotime(), l'esprit était tellement concentré sur la fonction de date. Toutes mes excuses.
mercredi

2

De manière plus objet:

$today = new \DateTimeImmutable('today');

exemple:

 echo (new \DateTimeImmutable('today'))->format('Y-m-d H:i:s');
// will output: 2019-05-16 00:00:00

et:

echo (new \DateTimeImmutable())->format('Y-m-d H:i:s');
echo (new \DateTimeImmutable('now'))->format('Y-m-d H:i:s');
// will output: 2019-05-16 14:00:35

1
$timestamp = strtotime('today midnight');

est le même que

$timestamp = strtotime('today');

et c'est un peu moins de travail sur votre serveur.


0

$midnight = strtotime('midnight');est valide
Vous pouvez également essayer strtotime('12am')ou strtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]'). J'ai omis d'ajouter aujourd'hui avant minuit car la valeur par défaut est aujourd'hui.


0

Si vous utilisez Carbon, vous pouvez effectuer les opérations suivantes. Vous pouvez également formater cette date pour définir un Expireen-tête HTTP.

Carbon::parse('tomorrow midnight')->format(Carbon::RFC7231_FORMAT)

0

Réponse mise à jour le 19 avril 2020

Nous pouvons simplement faire ceci:

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


-1

function getTodaysTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const startOfDay = currentTimeStamp - (currentTimeStamp % 86400);
  return { startOfDay, endOfDay: startOfDay + 86400 - 1 };
}

// starts from sunday
function getThisWeeksTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const currentDay = new Date(currentTimeStamp * 1000);
  const startOfWeek = currentTimeStamp - (currentDay.getDay() * 86400) - (currentTimeStamp % 86400);
  return { startOfWeek, endOfWeek: startOfWeek + 7 * 86400 - 1 };
}


function getThisMonthsTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const currentDay = new Date(currentTimeStamp * 1000);
  const startOfMonth = currentTimeStamp - ((currentDay.getDate() - 1) * 86400) - (currentTimeStamp % 86400);
  const currentMonth = currentDay.getMonth() + 1;
  let daysInMonth = 0;
  if (currentMonth === 2) daysInMonth = 28;
  else if ([1, 3, 5, 7, 8, 10, 12].includes(currentMonth)) daysInMonth = 31;
  else daysInMonth = 30;
  return { startOfMonth, endOfMonth: startOfMonth + daysInMonth * 86400 - 1 };
}


console.log(getTodaysTimeStamp());
console.log(getThisWeeksTimeStamp());
console.log(getThisMonthsTimeStamp());


La question concerne PHP. Cette réponse est écrite en JavaScript
Café électrique
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.