Autor | Zpráva | ||
---|---|---|---|
Pepan223ER Profil * |
#1 · Zasláno: 17. 10. 2011, 14:00:32
Ahoj, mám problém, který potřebuji vyřešit. V databázi mám uložený datumy v UNIX formátu (2011-10-17 13:56:25) převádím je na aktuální časové pásmo a převádím na jiný typ data podle nastavení (není důležité). Toto mi funguje. Jen potřebuji zjistit, zda se jedná o datup, kde je letní čas, pokud ano, připočíst 1 hodinu (jde mi pouze o zjištění, zda daný datum je v intervalu, kdy se mění čas)
Napadlo mně, že bych si mohl najít poslední neděli v březnu a říjnu a podle toho bych připočetl hodinu. Nevím však jak toto zjistit. Nenapadá Vás nějaká možnost? Děkuji Pepan223ER |
||
Str4wberry Profil |
#2 · Zasláno: 17. 10. 2011, 17:38:01
Je potřeba upravovat data za několik mnoho let, že je vyhledání si intervalů v kalendáři takový problém?
|
||
Pepan223ER Profil * |
#3 · Zasláno: 17. 10. 2011, 20:13:00
Str4wberry:
vůbec ale netuším jak :-/ |
||
Str4wberry Profil |
#4 · Zasláno: 17. 10. 2011, 20:32:53
Co netušíš? Jak se podívat do kalendáře a vypsat si dané intervaly, nebo jak sestrojit potřebný SQL dotaz?
|
||
Pepan223ER Profil * |
#5 · Zasláno: 17. 10. 2011, 20:57:36
když mám datum, jak zjistit jestli je v intervalu, kde se musí připočítat jedna hodina (letní čas)
|
||
Marek88 Profil |
Pseudokód pro rok 2011:
if(datum > 27.3.2011 1:59:59 AND datum < 30.10.2011 2:00:00){ // koncový čas je možná 3:00:00 (záleží, co s tím chceš dělat) datum = datum + 1 hodina; } // nebo pro databázi: UPDATE tabulka SET datum = datum + 1 hodina WHERE datum > 27.3.2011 1:59:59 AND datum < 30.10.2011 2:00:00 |
||
Pepan223ER Profil * |
#7 · Zasláno: 18. 10. 2011, 09:20:36
Marek88:
nepotřebuji pro tento rok, potřebuju pro n let dopředu |
||
okolojdouci Profil * |
#8 · Zasláno: 18. 10. 2011, 09:44:43
Pepan223ER:
A máš problém si ten řádek zkopírovat 20x pod sebe, rok upravit a dotazy provést? |
||
Marek88 Profil |
#9 · Zasláno: 18. 10. 2011, 10:14:07 · Upravil/a: Marek88
|
||
Kajman_ Profil * |
#10 · Zasláno: 18. 10. 2011, 10:50:42
Pepan223ER:
Nemůžete použít nějakou funkci, která to převádí včetně přihlédnutí k letnímu času? Např. v mysql můžete jednoduše převést čas do chtěné časové zóny pomocí select convert_tz('2011-10-17 13:56:25','GMT','CET') from dual; select convert_tz('2011-11-17 13:56:25','GMT','CET') from dual; |
||
Pepan223R Profil * |
#11 · Zasláno: 18. 10. 2011, 13:12:19
Ja ale potrebuju script v PHP a universalni protoze datum bude moct bejt jakykoliv
|
||
Kajman_ Profil * |
#12 · Zasláno: 18. 10. 2011, 13:40:04
Tak si to převeďte s použitím php.
<?php $tz_from = new DateTimeZone('GMT'); $tz_to = new DateTimeZone('Europe/Prague'); $date = new DateTime('2011-10-17 13:56:25', $tz_from); $date->setTimezone($tz_to); echo $date->format('Y-m-d H:i:s'); //echo " offset=",$date->getOffset(); echo "<br>"; $date = new DateTime('2011-11-17 13:56:25', $tz_from); $date->setTimezone($tz_to); echo $date->format('Y-m-d H:i:s'); //echo " offset=",$date->getOffset(); ?> |
||
Pepan223ER Profil * |
#13 · Zasláno: 18. 10. 2011, 14:12:23
toto už je lepší řešení - děkuji, určitě ho někde použiji. Stále ale neřeší můj problém já nemám problém s převodem času, potřebuji pouze zjistit, zda dané datum je v intervalu letního data - tedy zda je datum mezi poslední nedělí v v březnu a poslední nedělí v říjnu
|
||
Kajman_ Profil * |
#14 · Zasláno: 18. 10. 2011, 14:27:56
A chápete, že když to chcete univerzálně, tak neplatí, že všechny časové zóny používají letní čas a u některých je to právě naopak (mají tam léto, když je prosinec)? Proto je lepší použít fungující řešení, než přičítat hodiny ručně.
Jinak v tom minulém příkladě je zakomentováno vypisování časových posunů vůči GMT. |
||
Pepan223ER Profil * |
#15 · Zasláno: 18. 10. 2011, 14:30:54
letní čas se mění všude ve stejný čas se stejným posunem! Pro státy, kde letní čas není bude možnost vypnout letní čas
|
||
Joker Profil |
#16 · Zasláno: 18. 10. 2011, 14:39:46 · Upravil/a: Joker
Pepan223ER:
„zda dané datum je v intervalu letního data“ Nestačilo by náhodou: $letni = date("I"); if($letni == 1) echo "Letní čas!"; else echo "Mimo letní čas!"; „zda je datum mezi poslední nedělí v v březnu a poslední nedělí v říjnu“ Ani to by ale nebylo těžké zjistit: S výjimkou 25.-30. března a října je to jasné. Ve sporné datum: Jestliže pořadí dne v týdnu je menší než datum - 24, je to už po změně času. (Poznámka, připomínám, že pořadí dne v týdnu v PHP je 0 neděle, 1 pondělí atd.) „letní čas se mění všude ve stejný čas se stejným posunem!“ Není pravda, například v USA se mění, nebo minimálně měnil, o týden jinak (tzn. mezi ČR a daným místem v USA byl 2 týdny v roce jiný časový posun než zbytek roku) Dodatek k tomu algoritmu: V případě, že den v týdnu je zrovna neděle, je to akorát poslední neděle a pak by bylo nutné ještě zkoumat kolik je hodin. To platí i pro 31. března a října. |
||
Pepan223ER Profil * |
#17 · Zasláno: 18. 10. 2011, 15:26:14
děkuji za vysvětlení - požiji kóde s fcí date('I'), zdá se být nejlepší :-)
|
||
Kajman_ Profil * |
#18 · Zasláno: 18. 10. 2011, 16:11:03
Pepan223ER:
„letní čas se mění všude ve stejný čas se stejným posunem!“ Ale to je nesmysl. Viz. přehled letních časů tento rok. |
||
margin Profil * |
#19 · Zasláno: 18. 10. 2011, 16:23:08
Pepan223ER:
„letní čas se mění všude ve stejný čas se stejným posunem!“ I kdyby k tomu existovala vůle, tak je to nemožné, protože na jižní polokouli je "z technických důvodů" léto jindy, než na polokouli severní. |
||
Časová prodleva: 14 let
|
0