![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 4.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam pewien problem - nie mogę zmusić swojego interpretera do rozpoznania podanej mu daty czy jest ona w czasie letnim, czy zimowym...
Czemu w obu przypadkach date("I") zwraca 0? Czy jest tam jakiś błąd? Czy istnieje inny sposób rozpoznawania czasu? |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
DST jest uzależniony od strefy czasowej, a nie w każdej istnieje coś takiego. Sprawdź czy masz ustawione Europe/Warsaw.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 307 Pomógł: 37 Dołączył: 9.11.2010 Skąd: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 4.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ustawienie strefy nic nie daje - efekt nadal ten sam.
Generalnie to chcę uniknąć manipulowania strefą czasową - chodzi głównie o bazę danych. Przyjąłem dla aplikacji model, w którym dane w bazie zapisywane są w oparciu o jedną strefę czasową przez cały rok bez rozróżniania zimy czy lata. Powód jest oczywisty - uniknięcie dublowania godzin zapisu rekordów (większość tabel gromadzących dane ma potrzebny timestamp) lub braku rekordów z danej godziny podczas zmian czasów. W ten sposób rozróżnienie czasu zrzucam jedną prostą funkcją na skrypty wyświetlające dane, a te, w zależności od tego jaki jest czas, mają tłumaczyć daty (dodawać/odejmować godzinę lub pozostawić datę bez zmian). Samo date("I") działa poprawnie - kiedy był czas letni, to zwracało letni, kiedy zimowy, to zwraca zimowy, ale ja potrzebuję określić ten czas dla podanej konkretnie daty, a nie dla 'teraz'. //dodam, iż sprawdzałem skrypt na lokalu jak i na serwerze hostingowym, echo date_default_timezone_get(); odpowiednio zwraca Europe/Warsaw Ten post edytował jurcio6 3.01.2012, 13:38:36 |
|
|
![]() ![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 111 Pomógł: 10 Dołączył: 16.07.2009 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 4.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
^
tam śmiga dobrze.. pozostaje teraz tylko pytanie: "dlaczego na moim serwerze nie działa"? |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 587 Pomógł: 131 Dołączył: 8.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
-------------------- Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore
I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 307 Pomógł: 37 Dołączył: 9.11.2010 Skąd: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Ustawienie strefy nic nie daje - efekt nadal ten sam. Samo date("I") działa poprawnie - kiedy był czas letni, to zwracało letni, kiedy zimowy, to zwraca zimowy, ale ja potrzebuję określić ten czas dla podanej konkretnie daty, a nie dla 'teraz'. Z całym szacunkiem, nie widzę fizycznej możliwości aby to co mówisz było prawdą. Chcesz mi powiedzieć że interpreter PHP zwraca inny wynik gdy nie podasz mu czasu (czyli 'teraz') a gdy podasz mu te 'teraz' ręcznie ? Oczywiście nikogo nie obrażam, może jedynie nie widzisz czegoś co zmienia się pomiędzy tymi testami. Ten post edytował Uriziel01 3.01.2012, 14:56:43 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 4.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Porusza, aczkolwiek nie rozwiązuje.
Z przetrzymywaniem dat w bazie i wyświetlaniem (konwertowaniem w warstwie prezentacji) radzę sobie dokładnie tak, jak jest napisane w artykule. Problem pojawia się aby rozpoznać czy podana data jest w czasie zimowym, czy nie. Przykład. Mamy bazę danych z tabelą tab1 i polami a,b,c, gdzie c jest polem typu DateTime w formacie (yyyy-mm-dd hh:mm:ss). Godziny w bazie danych zapisywanie są w UTC. I teraz tak: użytkownik chce wyświetlić dane z przedziału czasu 2011-01-01 10:00:00 - 2011-09-01 10:00:00 i takie też daty wpisze w formularzu. Wobec tego skrypt musi zrobić nam zapytanie - aby było poprawne, od jednej z dat musimy odjąć (lub dodać) godzinę, bo jest w czasie zimowym (letnim - w zależności od aktualnego czasu). Jedyne, co mi potrzebne w tym momencie, to rozróżnienie w jakim czasie (letnim, czy zimowym) mieści się podana przez użytkownika data. Tylko tyle. Albo aż tyle. Kolego Uriziel01: Jakbym widział, to bym nie pisał. Wklejałem wyżej dokładnie taki kod, jaki odpalałem na serwerze, i niezależnie od podanego czasu, wynikiem zawsze jest "zimowy". Pewności 100% również nie mam, czy wcześniej działało dobrze i czy było to na tej samej maszynie/instalacji - po prostu nie pamiętam. Chodzi teraz tylko i wyłącznie o ten wklejony kod i o to czemu na http://writecodeonline.com/php/ działa to poprawnie, a na moim hostingu nie, co może być nie tak? Ten post edytował jurcio6 3.01.2012, 15:09:34 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 587 Pomógł: 131 Dołączył: 8.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
A daj tak.
I zobacz jak się zachowuje po odkomentowaniu. Ten post edytował rocktech.pl 3.01.2012, 15:40:50 -------------------- Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore
I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 4.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ok, teraz stało się coś zupełnie dziwnego, bo nagle wszystko zaczęło działać... Odpaliłem ponownie następujący kod:
Wygląda na to, że skrypt nie radził sobie z datą sformatowaną przez date podaną jako argument dla funkcji date, tj. Nie działał on również przy strefie czasowej ustawionej na UTC oraz GMT. Dziwi mnie jedynie fakt, że już wcześniej testowałem go w kilku różnych, m.in. w podanych wyżej wariantach.. albo mi coś umknęło, albo póki co działa to to jak chce - na pewno będę się jeszcze przyglądał temu wszystkiemu. Dzięki za naprowadzenie na temat. Ten post edytował jurcio6 3.01.2012, 15:48:43 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.07.2025 - 17:48 |