Jak uzyskać znacznik czasu np. 22-09-2008
?
350
Ta metoda działa na obu systemach Windows i Unix i jest czas-zone świadomy, co jest prawdopodobnie to, co chcesz, jeśli pracujesz z datami .
Jeśli nie zależy Ci na strefie czasowej lub chcesz skorzystać ze strefy czasowej używanej przez serwer:
$d = DateTime::createFromFormat('d-m-Y H:i:s', '22-09-2008 00:00:00');
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093324 (To będzie się różnić w zależności od strefy czasowej serwera ...)
Jeśli chcesz określić, w której strefie czasowej, tutaj EST. (Tak samo jak w Nowym Jorku.)
$d = DateTime::createFromFormat(
'd-m-Y H:i:s',
'22-09-2008 00:00:00',
new DateTimeZone('EST')
);
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093305
Lub jeśli chcesz korzystać z UTC . (Taki sam jak „ GMT ”.)
$d = DateTime::createFromFormat(
'd-m-Y H:i:s',
'22-09-2008 00:00:00',
new DateTimeZone('UTC')
);
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093289
Niezależnie od tego zawsze dobrym punktem wyjścia jest zachowanie ścisłości podczas analizowania ciągów w ustrukturyzowanych danych. Może zaoszczędzić niewygodnego debugowania w przyszłości. Dlatego zalecam zawsze określać format daty.
Istnieje również funkcja strptime (), która oczekuje dokładnie jednego formatu:
źródło
date_parse_from_format
zamiaststrptime
.strptime
nie jest zaimplementowany na platformach Windows.Z
DateTime
API :To samo z proceduralnym API:
Jeśli powyższe nie powiedzie się, ponieważ używasz nieobsługiwanego formatu , możesz użyć
Zauważ, że jeśli nie ustawisz
!
, część czasu zostanie ustawiona na bieżącą godzinę, która różni się od pierwszych czterech, które będą używać północy, gdy pominiesz czas.Jeszcze inną alternatywą jest użycie
IntlDateFormatter
interfejsu API:O ile nie pracujesz ze zlokalizowanymi ciągami dat, łatwiejszym wyborem jest prawdopodobnie DateTime.
źródło
!
znacznik czasu Moja data zmieniał się przy każdym odświeżeniu i doprowadzał mnie do szału - ponieważ DateTime pomogło mi dodać bieżącą godzinę bez pytania ani polecenia. Grrr.Bądź ostrożny z takimi funkcjami, jak
strtotime()
„zgadnij”, co masz na myśli (nie zgaduje oczywiście, że zasady są tutaj ).Rzeczywiście
22-09-2008
zostanie przeanalizowany jako 22 września 2008 r. , Ponieważ jest to jedyna rozsądna rzecz.Jak zostanie
08-09-2008
przeanalizowany? Prawdopodobnie 09 sierpnia 2008 r .Co
2008-09-50
? Niektóre wersje PHP analizują to jako 20 października 2008 .Jeśli więc masz pewność, że dane wejściowe są w
DD-MM-YYYY
formacie, lepiej skorzystać z rozwiązania oferowanego przez @Armin Ronacher .źródło
dd-mm-yyyy
nie jestmm-dd-yyyy
.YYYY-mm-dd
. Konwersja dzieje się tylko w celu wyświetlenia użytkownikomTa metoda działa na obu systemach Windows i Unix i jest czas-zone świadomy, co jest prawdopodobnie to, co chcesz, jeśli pracujesz z datami .
Jeśli nie zależy Ci na strefie czasowej lub chcesz skorzystać ze strefy czasowej używanej przez serwer:
1222093324 (To będzie się różnić w zależności od strefy czasowej serwera ...)
Jeśli chcesz określić, w której strefie czasowej, tutaj EST. (Tak samo jak w Nowym Jorku.)
1222093305
Lub jeśli chcesz korzystać z UTC . (Taki sam jak „ GMT ”.)
1222093289
Niezależnie od tego zawsze dobrym punktem wyjścia jest zachowanie ścisłości podczas analizowania ciągów w ustrukturyzowanych danych. Może zaoszczędzić niewygodnego debugowania w przyszłości. Dlatego zalecam zawsze określać format daty.
źródło
Korzystanie z mktime :
źródło
strtotime()
Z jakiegoś powodustrtotime()
nie działa w określonych terminach, a zatem jest bardzo zawodne.Za pomocą funkcji strtotime () możesz łatwo przekonwertować datę na znacznik czasu
Więcej informacji: http://php.net/manual/en/function.strtotime.php
Narzędzie do konwersji online: http://freeonlinetools24.com/
źródło
Oto bardzo proste i skuteczne rozwiązanie wykorzystujące funkcje
split
imtime
:Dla mnie to działało jak urok.
źródło
Ponieważ funkcja
strptime()
nie działa w systemie Windows istrtotime()
może zwrócić nieoczekiwane wyniki, zalecamy użyciedate_parse_from_format()
:źródło
Jeśli chcesz się upewnić, czy data zostanie przeanalizowana w oczekiwany sposób, możesz użyć
DateTime::createFromFormat()
:W tym przypadku jest to oczywiste, ale np.
03-04-2008
Może być 3 kwietnia lub 4 marca, w zależności od tego, skąd pochodzisz :)źródło
DateTime::createFromFormat
zwracafalse
w przypadku błędu , nienull
.Jeśli znasz format,
strptime
ponieważstrtotime
zgaduje format, co nie zawsze jest poprawne. Ponieważstrptime
nie jest zaimplementowany w systemie Windows, istnieje funkcja niestandardowaPamiętaj, że wartość zwrotu
tm_year
pochodzi z 1900 roku! itm_month
wynosi 0-11Przykład:
źródło
http://php.net/manual/en/function.date.php
źródło
źródło
Użyj funkcji PHP
strtotime()
data - Sformatuj lokalną godzinę / datę
źródło
źródło
Jeśli chcesz, umieść go w znaczniku czasu typu wejścia MySQL . Powyższe działa bardzo dobrze (tylko w PHP 5 lub nowszym):
źródło
Oto jak bym to zrobił:
W ten sposób poinformujesz funkcję, jakiego formatu daty używasz, a nawet określisz strefę czasową.
źródło
Uważaj na czas / strefę, jeśli ustawiłeś, aby zapisywać daty w bazie danych, ponieważ dostałem problem podczas porównywania dat z mysql, które zostały przekonwertowane na
timestamp
użyciestrtotime
. musisz użyć dokładnie tego samego czasu / strefy przed konwersją daty na znacznik czasu, w przeciwnym razie strtotime () użyje domyślnej strefy czasowej serwera.Zobacz ten przykład: https://3v4l.org/BRlmV
źródło
Jeśli chcesz przekonwertować datetime UTC (
2016-02-14T12:24:48.321Z
) na znacznik czasu, oto jak to zrobić:źródło