Chcę uzyskać dzisiejszą datę biorąc pod uwagę strefę czasową w formacie Paul Eggert (America/New_York
) w PHP?Otrzymasz aktualną datę, biorąc pod uwagę strefę czasową w PHP?
Odpowiedz
najpierw ustawić domyślną strefę czasową i uzyskać datę wtedy, data będzie w strefie czasowej należy podać:
<?php
date_default_timezone_set('America/New_York');
$date= date('m-d-Y') ;
?>
http://php.net/manual/en/function.date-default-timezone-set.php
<?php
date_default_timezone_set('GMT-5');//Set New York timezone
$today = date("F j, Y")
?>
Jeśli masz dostęp do PHP 5.3, intl extension jest bardzo dobry do robienia rzeczy takich jak to.
Oto przykład z podręcznika:
$fmt = new IntlDateFormatter("en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/Los_Angeles',IntlDateFormatter::GREGORIAN );
$fmt->format(0); //0 for current time/date
W twoim przypadku, można to zrobić:
$fmt = new IntlDateFormatter("en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
'America/New_York');
$fmt->format($datetime); //where $datetime may be a DateTime object, an integer representing a Unix timestamp value (seconds since epoch, UTC) or an array in the format output by localtime().
Jak można ustawić strefę czasową, takich jak America/New_York
, jest to o wiele lepsze niż przy użyciu Przesunięcie GMT lub UTC, ponieważ uwzględnia również dzienne okresy oszczędzania światła.
W końcu, jako rozszerzenie wewnętrzne wykorzystuje dane ICU, które zawierają wiele bardzo przydatnych funkcji, jeśli chodzi o tworzenie własnych formatów daty/czasu.
innych odpowiedzi ustawić strefę czasową dla wszystkich dat w twojej system. To nie zawsze działa dobrze, jeśli chcesz obsługiwać wiele stref czasowych dla użytkowników.
Oto krótka wersja:
<?php
$date = new DateTime("now", new DateTimeZone('America/New_York'));
echo $date->format('Y-m-d H:i:s');
Pracuje w PHP> = 5.2.0
Lista obsługiwanych stref czasowych: php.net/manual/en/timezones.php
Oto wersja z istniejącym czasu i ustawienia strefa czasowa według ustawień użytkownika
<?php
$usersTimezone = 'America/New_York';
$date = new DateTime('Thu, 31 Mar 2011 02:05:59 GMT', new DateTimeZone($usersTimezone));
echo $date->format('Y-m-d H:i:s');
Oto bardziej gadatliwy wersja pokazać proces trochę bardziej wyraźnie
<?php
// Date for a specific date/time:
$date = new DateTime('Thu, 31 Mar 2011 02:05:59 GMT');
// Output date (as-is)
echo $date->format('l, F j Y g:i:s A');
// Output line break (for testing)
echo "\n<br />\n";
// Example user timezone (to show it can be used dynamically)
$usersTimezone = 'America/New_York';
// Convert timezone
$tz = new DateTimeZone($usersTimezone);
$date->setTimeZone($tz);
// Output date after
echo $date->format('l, F j Y g:i:s A');
Biblioteki
- Carbon - bardzo popularny termin bibliotece.
- Chronos - Zastąpienie zamiennika dla węgla skupionego na niezmienności. Zobacz poniżej, dlaczego jest to ważne.
- jenssegers/date - Rozszerzenie Carbon, które dodaje obsługę wielu języków.
Jestem pewien, że dostępnych jest wiele innych bibliotek, ale to jest kilka znanych mi osób.
Bonus Lekcja: Niezmienne Data Objects
Chociaż jesteś tu, pozwól mi zaoszczędzić trochę przyszłej głowy. Załóżmy, że chcesz obliczyć 1 tydzień od dzisiaj i 2 tygodnie od dzisiaj. Możecie napisać kod jak:
<?php
// Create a datetime (now, in this case 2017-Feb-11)
$today = new DateTime();
echo $today->format('Y-m-d') . "\n<br>";
echo "---\n<br>";
$oneWeekFromToday = $today->add(new DateInterval('P7D'));
$twoWeeksFromToday = $today->add(new DateInterval('P14D'));
echo $today->format('Y-m-d') . "\n<br>";
echo $oneWeekFromToday->format('Y-m-d') . "\n<br>";
echo $twoWeeksFromToday->format('Y-m-d') . "\n<br>";
echo "\n<br>";
dane wyjściowe:
2017-02-11
---
2017-03-04
2017-03-04
2017-03-04
Hmmmm ... To nie całkiem to, czego chcieliśmy. Modyfikowanie tradycyjnego obiektu DateTime
w PHP nie tylko zwraca zaktualizowaną datę, ale także modyfikuje oryginalny obiekt.
To gdzie DateTimeImmutable
przychodzi
$today = new DateTimeImmutable();
echo $today->format('Y-m-d') . "\n<br>";
echo "---\n<br>";
$oneWeekFromToday = $today->add(new DateInterval('P7D'));
$twoWeeksFromToday = $today->add(new DateInterval('P14D'));
echo $today->format('Y-m-d') . "\n<br>";
echo $oneWeekFromToday->format('Y-m-d') . "\n<br>";
echo $twoWeeksFromToday->format('Y-m-d') . "\n<br>";
Wyjście.
2017-02-11
---
2017-02-11
2017-02-18
2017-02-25
W tym drugim przykładzie mamy daty możemy oczekiwać powrotem. Używając DateTimeImmutable
zamiast DateTime
, zapobiegamy przypadkowym mutacjom stanu i zapobiegamy potencjalnym błędom.
Doceń odpowiedź @DesignerGuy, ale tutaj znajduje się * właściwa * lista obsługiwanych stref czasowych: http://php.net/manual/en/timezones.php –
Dzięki @ChrisHarrison. Właśnie zaktualizowałem odpowiedź. – DesignerGuy
To powinna być akceptowana odpowiedź i właśnie tego szukałem. Dzięki! – Brett
Stworzyłem pewną prostą funkcję można wykorzystać do konwersji czasu do dowolnej strefy czasowej:
function convertTimeToLocal($datetime,$timezone='Europe/Dublin') {
$given = new DateTime($datetime, new DateTimeZone("UTC"));
$given->setTimezone(new DateTimeZone($timezone));
$output = $given->format("Y-m-d"); //can change as per your requirement
return $output;
}
- 1. Jak uzyskać lokalną strefę czasową w PHP?
- 2. PHP: Jak uzyskać niedzielę i sobotę, biorąc pod uwagę datę wejścia?
- 3. MYSQL ustawić strefę czasową w kodzie PHP
- 4. Dostosuj strefę czasową
- 5. Jak przeanalizować datę, w tym strefę czasową z czasem Jody
- 6. PHP - pobierz aktualną datę wydania wersji php
- 7. Perl: Biorąc pod uwagę numer roku i tygodnia, jak mogę uzyskać pierwszą datę w tym tygodniu?
- 8. Moment uzyskać aktualną datę
- 9. mysqli_select_db() oczekuje parametr 1 za mysqli, biorąc pod uwagę ciąg
- 10. Znalezienie klucza w mapie, biorąc pod uwagę wartość
- 11. Jak zabić proces w Javie, biorąc pod uwagę konkretny PID
- 12. Którą strefę czasową używa Django w Auto_now_add DateField?
- 13. Pobierz aktualną datę i datę po dwóch miesiącach w php
- 14. Jak wybrać tekst RichTextBox, biorąc pod uwagę indeks i długość
- 15. Jak renderować płynną ścieżkę, biorąc pod uwagę zestaw punktów danych?
- 16. Szyny - Biorąc pod uwagę blok tekstu, auto-link links
- 17. Jak zrobić LIKE biorąc pod uwagę dwie kolumny?
- 18. Biorąc pod uwagę PID dziecka, jak uzyskać rodzic PID
- 19. Pierwsze wiersza i kolumny trójkątnej Matrix, biorąc pod uwagę Index
- 20. wyrażenie NSDictionaryResultType nie biorąc pod uwagę nowo wstawionych obiektów
- 21. Znajdź plik jar, biorąc pod uwagę nazwę klasy?
- 22. Symfony2: Jak zweryfikować jednostkę, biorąc pod uwagę aktualnie zalogowanego użytkownika?
- 23. Excel VBA: Jak rozszerzyć zakres Biorąc pod uwagę bieżący Wybór
- 24. Biorąc pod uwagę nazwę akcji htmlHelper +, jak określić nazwę kontrolera?
- 25. jQuery: Biorąc pod uwagę selektor, znajdź tylko jego widoczne elementy.
- 26. Konwersja RGB do RGBA biorąc pod uwagę tło
- 27. Biorąc pod uwagę dwa ciągi, jest jednym anagram drugiej
- 28. Jak przekonwertować HttpRequestBase na HttpRequestMessage, biorąc pod uwagę nazwy nagłówków?
- 29. Biorąc pod uwagę tablicę i predykat, znajdź pierwszy pasujący element.
- 30. Biorąc pod uwagę plik WSDL, utwórz prostego klienta Java
Zauważ, że używanie 'date_default_timezone_set()' ustawia go dla wszystkich wykorzystania 'date()' po tym punkcie. Zobacz moją odpowiedź na przykład, jak zarządzać wieloma strefami czasowymi. – DesignerGuy
Obecnie złą praktyką, jeśli chcesz uzyskać tylko 1 datę w tej strefie czasowej, zobacz poniżej odpowiedź DesignerGuy na bardziej rozbudowane rozwiązanie. –
Byłoby miło mieć ogólny sposób wyboru strefy czasowej. – Zan