Jak bym zabrał się do uzyskania sygnatury czasowej w php na dziś o północy. Powiedzmy, że jest poniedziałek, 17:00 i chcę mieć znacznik czasu z poniedziałku (dzisiaj) o północy (12:00), co już się wydarzyło.
Północ to nie rano ani po południu. Z technicznego punktu widzenia nie istnieje również sygnatura czasowa północy.
hakre
16
@hakre Nie zgadzam się z tobą. Północ to rano i bez względu na format, w jakim znajduje się znacznik czasu, istnieje wartość północy.
G-Nugget
1
jeśli 00:00:00 rozważane dzisiaj lub jutro. Dzisiejsza północ jest już za nami, prawie zawsze, technicznie. Chcesz mniej więcej 23:59:59 „dzisiejszej nocy” lub 00:00:00 „północy dzisiaj, czyli jutro”.
wesside
5
godzina 00:00:00 byłaby dzisiejszą północą, ponieważ bez względu na to, ile czasu zajmie dotarcie do godziny 00:00:00, która już się wydarzyła. gdzie 23:59:59 będzie dziś wieczorem. Jeśli mówisz w kategoriach dnia dzisiejszego. Północ jest rano.
Nazca
4
00:00 to północ na początku dnia, 24:00 to północ na końcu dnia. Jednak dla uproszczenia większość zegarów cyfrowych pomija 24:00 - deklarując, że północ to początek nowego dnia. To znaczy 8 lutego 24:00 i 9 lutego 00:00 to w praktyce ten sam punkt w czasie.
@SamHuckaby: Jest jeszcze łatwiej: $timestamp = strtotime('today');jest północ. Ale pssst ten powyżej wygląda fajniej jako odpowiedź na pytanie;)
hakre
Właściwie muszę zacząć dzisiaj i północy dzisiaj. Jak mogę znaleźć dzisiejszy początek mam na myśli 00:00:00
Happy Coder
3
@AlwinAugustin: Powinieneś rozważyć zmianę sformułowania. Północ to technicznie rzecz biorąc dwa dni. Więc nie ma czegoś takiego jak „dziś już nie ma”. Ponadto: Dzisiejsze Midgnight (zgodnie z definicją) to (tuż przed) początkiem dnia dzisiejszego. Prawdopodobnie masz na myśli następną północ po dzisiejszym południu .
hakre
tak właściwie to, czego potrzebuję, to 00:00:00 dzisiaj i 23:59:59 dzisiaj
Happy Coder
2
Pamiętaj, że spowoduje to wyświetlenie północy strefy czasowej twojego serwera PHP, a nie UTC + 0 ! Aby uzyskać UTC + 0, możesz użyć strtotime('today+00:00').
mae
73
Myślę, że powinieneś użyć nowego obiektu PHP DateTime, ponieważ nie ma problemów z robieniem dat poza 32-bitowymi ograniczeniami, które ma strtotime (). Oto przykład, jak uzyskać dzisiejszą datę o północy.
$today =newDateTime();
$today->setTime(0,0);
Lub jeśli używasz PHP 5.4 lub nowszego, możesz to zrobić w ten sposób:
$today =(newDateTime())->setTime(0,0);
Następnie możesz użyć, echo $today->format('Y-m-d');aby uzyskać format, w jakim chcesz uzyskać obiekt wyjściowy.
Wolę też używać nowego obiektu DateTime. Jeśli połączysz tę odpowiedź z @ hakr, otrzymasz:, new DateTime('today midnight')co sprawia, że intencja jest bardziej jasna (ale to oczywiście kwestia gustu).
Martijn
1
Wykonuję pracę z ORM SQL i musiałem użyć obiektu DateTime do porównań. To jest dokładnie to, czego szukałem. +1
NobleUplift
Może być$today = new DateTime('today')
ProgZi
Przydatne również, jeśli używasz Carbon, który dziedziczy po DateTime. W ten sposób możesz też to zrobić, new Carbon('today midnight')a następnie możesz użyć wszystkich rzeczy z węgla, takich jak ->subDays(6). Zobacz carbon.nesbot.com
Christopher K.,
Odnośnie ograniczenia 32-bitowego: Dokumentacja PHP dla strtotime stwierdza : „W przypadku 64-bitowych wersji PHP, prawidłowy zakres znacznika czasu jest w rzeczywistości nieskończony, ponieważ 64 bity mogą reprezentować około 293 miliardów lat w dowolnym kierunku.” Tak więc dotyczy to tylko 32-bitowego php.
Chcesz obliczyć czas ostatniego zdarzenia niebieskiego, w którym słońce przeszło bezpośrednio pod twoimi stopami, dostosowany do lokalnych konwencji oznaczania południa, a także potencjalnie dostosowany tak, aby ludzie mieli wystarczającą ilość światła dziennego po powrocie do domu z pracy i na inne względy polityczne.
Zniechęcające, prawda? W rzeczywistości jest to częsty problem, ale pełna odpowiedź zależy od lokalizacji:
$zone =new \DateTimeZone('America/New_York');// Or your own definition of “here”
$todayStart =new \DateTime('today midnight', $zone);
$timestamp = $todayStart->getTimestamp();
To, co zrobiłem, to użycie funkcji daty PHP, aby uzyskać dzisiejszą datę bez żadnych odniesień do czasu, a następnie przekazałem ją do funkcji „string to time”, która konwertuje datę i godzinę na znacznik czasu epoki. Jeśli nie ma czasu, przyjmuje pierwszą sekundę tego dnia.
Czy istnieje określony format, o który prosił PO? Jeśli tak, z przyjemnością zmodyfikuję mój post, aby zwrócić dowolny format.
SamHuckaby
całkowicie przeoczony strtotime(), umysł był tak skupiony na funkcji daty. Przeprosiny.
wesside
2
W bardziej obiektywny sposób:
$today =new \DateTimeImmutable('today');
przykład:
echo (new \DateTimeImmutable('today'))->format('Y-m-d H:i:s');// will output: 2019-05-16 00:00:00
i:
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
$midnight = strtotime('midnight');jest ważny Możesz także wypróbować
strtotime('12am')lub strtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]'). Pominąłem dodawanie dzisiaj przed północą, ponieważ domyślnie jest to dzisiaj.
Odpowiedzi:
Możesz rzucić okiem na to, co ma do zaoferowania PHP: http://php.net/datetime
źródło
$timestamp = strtotime('today');
jest północ. Ale pssst ten powyżej wygląda fajniej jako odpowiedź na pytanie;)strtotime('today+00:00')
.Myślę, że powinieneś użyć nowego obiektu PHP DateTime, ponieważ nie ma problemów z robieniem dat poza 32-bitowymi ograniczeniami, które ma strtotime (). Oto przykład, jak uzyskać dzisiejszą datę o północy.
Lub jeśli używasz PHP 5.4 lub nowszego, możesz to zrobić w ten sposób:
Następnie możesz użyć,
echo $today->format('Y-m-d');
aby uzyskać format, w jakim chcesz uzyskać obiekt wyjściowy.Obiekt PHP DateTime
źródło
new DateTime('today midnight')
co sprawia, że intencja jest bardziej jasna (ale to oczywiście kwestia gustu).$today = new DateTime('today')
new Carbon('today midnight')
a następnie możesz użyć wszystkich rzeczy z węgla, takich jak->subDays(6)
. Zobacz carbon.nesbot.comDzisiaj o północy. Łatwo.
źródło
Chcesz obliczyć czas ostatniego zdarzenia niebieskiego, w którym słońce przeszło bezpośrednio pod twoimi stopami, dostosowany do lokalnych konwencji oznaczania południa, a także potencjalnie dostosowany tak, aby ludzie mieli wystarczającą ilość światła dziennego po powrocie do domu z pracy i na inne względy polityczne.
Zniechęcające, prawda? W rzeczywistości jest to częsty problem, ale pełna odpowiedź zależy od lokalizacji:
Potencjalne definicje „tutaj” są wymienione na https://secure.php.net/manual/en/timezones.php
źródło
strtotime('America/New_York today midnight');
? - 3v4l.org/I85qDpowinien dać ci to, czego szukasz.
wyjaśnienie
To, co zrobiłem, to użycie funkcji daty PHP, aby uzyskać dzisiejszą datę bez żadnych odniesień do czasu, a następnie przekazałem ją do funkcji „string to time”, która konwertuje datę i godzinę na znacznik czasu epoki. Jeśli nie ma czasu, przyjmuje pierwszą sekundę tego dnia.
Źródła: Funkcja daty: http://php.net/manual/en/function.date.php
Ciąg do czasu: http://us2.php.net/manual/en/function.strtotime.php
źródło
strtotime()
, umysł był tak skupiony na funkcji daty. Przeprosiny.W bardziej obiektywny sposób:
przykład:
i:
źródło
jest taki sam jak
i to trochę mniej pracy na twoim serwerze.
źródło
$midnight = strtotime('midnight');
jest ważnyMożesz także wypróbować
strtotime('12am')
lubstrtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]')
. Pominąłem dodawanie dzisiaj przed północą, ponieważ domyślnie jest to dzisiaj.źródło
Jeśli używasz Carbon, możesz wykonać następujące czynności. Możesz również sformatować tę datę, aby ustawić
Expire
nagłówek HTTP.źródło
Zaktualizowana odpowiedź w 19 kwietnia 2020 r
Po prostu możemy to zrobić:
$today = date('Y-m-d 00:00:00');
źródło
źródło