Jestem zdezorientowany, używając PHP do obsługi daty / czasu.
Oto co próbuję zrobić: kiedy użytkownik odwiedza moją stronę, pytam o jego strefę czasową, a następnie wyświetlam „dzień tygodnia” w jego strefie czasowej.
Nie chcę korzystać z dnia przeglądarki. Chcę zrobić to obliczenie w php.
Oto jak staram się to osiągnąć:
- Strefa czasowa wprowadzona przez użytkownika
- Znacznik czasu systemu Unix obliczany przez funkcję php time ().
Ale nie wiem, jak postępować ... Jak uzyskać „dzień tygodnia” w tej strefie czasowej.
date("N", $timestamp)
do pobierania1..7
wartości począwszy od poniedziałku. W starszych wersjach możesz użyć sztuczki,(date("w", $timestamp) + 6) % 7
aby uzyskać0..6
wartości począwszy od poniedziałku.Moje rozwiązanie jest takie:
Wynik to:
Tuesday
Wynik to:
Tue
źródło
Myślę, że to poprawna odpowiedź, po prostu zmień
Europe/Stockholm
strefę czasową użytkowników.http://php.net/manual/en/function.date.php
Lista obsługiwanych stref czasowych jest dostępna pod adresem http://php.net/manual/en/timezones.php
źródło
Wielkie dzięki za wasze szybkie komentarze.
Właśnie tego będę teraz używać. Umieszczanie funkcji tutaj, aby ktoś mógł z niej skorzystać.
Zgłoś, jeśli znajdziesz jakieś poprawki.
źródło
Kolejny szybki sposób:
źródło
Jeśli możesz uzyskać przesunięcie strefy czasowej, możesz po prostu dodać je do aktualnego znacznika czasu, a następnie użyć funkcji gmdate, aby uzyskać ich czas lokalny.
źródło
To powinno działać (nie testowałem tego, więc YMMV). Działa poprzez przechowywanie bieżącej strefy czasowej skryptu, zmianę jej na tę określoną przez użytkownika, pobranie dnia tygodnia z
date()
funkcji o określonej sygnaturze czasowej, a następnie ustawienie strefy czasowej skryptu z powrotem na tę, od której miał zacząć.Możesz mieć jednak przygody z identyfikatorami stref czasowych.
źródło
„Dzień tygodnia” jest właściwie czymś, co można uzyskać bezpośrednio z funkcji php date () w formacie „l” lub „N”. Zajrzyj do instrukcji
edycja: Przepraszam, że nie przeczytałem poprawnie postów Kalium, on już to wyjaśnił. Mój błąd.
źródło
Data czeku to poniedziałek lub niedziela przed ostatnim poniedziałkiem lub ostatnią niedzielą
źródło
Oparty na jednym z pozostałych rozwiązań z flagą do przełączania między tygodniami zaczynającymi się w niedzielę lub poniedziałek
źródło
Standardowe reprezentacje części daty oparte na literach są świetne, z wyjątkiem faktu, że nie są tak intuicyjne. Znacznie wygodniejszym sposobem jest identyfikacja podstawowych abstrakcji i szeregu konkretnych implementacji. Poza tym dzięki takiemu podejściu możesz skorzystać z autouzupełniania.
Ponieważ mówimy tutaj o datach, wydaje się prawdopodobne, że podstawową abstrakcją jest
ISO8601DateTime
. Jedną z konkretnych implementacji jest aktualna data i godzina, ta, której potrzebujesz, gdy wysyła żądanie do twojego zaplecza, stądNow()
klasa. Drugi, który jest dla ciebie przydatny, to data i godzina dostosowana do jakiejś strefy czasowej. Nic dziwnego, że to się nazywaAdjustedAccordingToTimeZone
. I wreszcie, potrzebujesz dnia tygodnia w strefie czasowej minionej daty i godziny: jest do tegoLocalDayOfWeek
klasa. Tak więc kod wygląda następująco:Aby uzyskać więcej informacji na temat tego podejścia, zajrzyj tutaj .
źródło
źródło