2011-12-18 21 views
21

Jeśli mam losowy znacznik czasu unixu, jak mogę zaokrąglić go do dzisiejszej północy lub północy wybranej przez użytkownika. Powodem tego jest to, że chcę dodać godziny i minuty po określonym dniu o północy.Znacznik czasu unix do północy

Na przykład, jeśli znacznik czasu to 1324189035, to w jaki sposób mogę usunąć godziny, minuty i sekundy, aby umieścić znacznik czasu o północy danego dnia.

+2

O północy której strefy czasowej? –

Odpowiedz

19
echo date('d-m-Y H:i:s', strtotime('today', 1324189035)); 
+0

doskonały. dzięki! – user962449

+1

to jest piękne. Widziałem takie, w którym ktoś myślący poza polem kładł jak '$ roundedStamp = $ time - ($ time% 86400);' i był sprytny, ale nie doskonały. Zaokrąglanie w górę lub w dół zależy od tego, że nie działa. To robi :) –

+0

Spowoduje to zwrócenie ciągu daty, musisz dodać 'strtotime', aby uzyskać znacznik czasu o północy, który powinien zawijać się wokół całego kodu, który jest echo. –

16

względu na to, jak używasz go, nie byłoby w ogóle obliczyć północy: znacznie łatwiej jest po prostu przekonwertować czego dodanie do znacznika czasu do czasu 24 godziny, a następnie użyć strtotime:

echo strtotime("0:00",1324189035); // 1324184400 
echo strtotime("17:50",1324189035); // 1324248600 

A jeśli chcesz mieć to w czytelnej, użyj date i m/d/Y H:i:s:

echo date('m/d/Y H:i:s', strtotime('17:50',1324189035)); // 12/18/2011 17:50:00 
+0

To rozwiązanie jest najbardziej eleganckie i przyjemne. Należy pamiętać, że to wszystko jest GMT, więc aby uzyskać 17:50 w każdej innej strefie czasowej, przesunięcie czasu musi być dodane przed tym mapowaniem czasu, a następnie ponownie wzięte (zakładając, że ostatecznie szukasz GMT/Czas UTC na wyszukiwanie danych w bazie danych, na przykład). – Jason

+0

Wydaje się mapować północ do * poprzedniej * północy: 'echo strtotime (" 0:00 +0000 ", 1443441600);' wypisuje '1443398400' –

4

prostu użyć

strtotime('today midnight'); 
Powiązane problemy