Autor Zpráva
Halluz-man
Profil *
Potrebuju aby to vypsavalo jestli je sudy nebo lichy tyden (je to na skolni stranky).
Pokazdy kdyz me neco napadlo tak to z nejakyho duvodu neslo.
Pokud o necem vite napiste pls.
Str4wberry
Profil
Halluz-man
A nešlo by použít PHP, zdálo by se mi to lepší?
Béďa
Profil *
jestli ano, tak date ("W");
Str4wberry
Profil
Béďa
„jestli ano, tak date ("W");“
Tím přece získáš jen číslo týdne.
<?php 

echo (date(W)%2)? 'Lichý' : 'Sudý';
?>
Béďa
Profil *
zjistit sudý/lichý snad není problém
Joker
Profil
Pro zajímavost, jak byste to dělali v Javascriptu?

Kdysi jsem řešil pořadí týdne pro nějaké datum a nebylo to úplně jednoduché, tak jestli někdo má lepší řešení...
Str4wberry
Profil
Béďa
„zjistit sudý/lichý snad není problém“
Jak pro koho.
Halluz-man
Profil *
Tak diki moc vsem za tak rychlou reakci. A hlavne Str4wberry ;)
No a pro me je celkem problem zjistit jaky je, protoze v nasem kalendari to neni a na netu sem to jeste nevidel ani nenasel.
Za odmenu se kouknete na moje stranky :) www.halluz-man.wz.cz
peta
Profil
Halluz-man
cz.php.net/date - zde jsi to nenasel? To se divim...

Joker
http://www.volny.cz/peter.mlich/www.htm#msub8
http://javascript-reference.info/
Ze by s pouzitim datumovych funkci se to dalo udelat?

Jakym zpusobem pocitas pocet dnu v mesici?
http://www.volny.cz/peter.mlich/Pr/calendar.htm

Jestlize mas uplne casove razitko, pak te zajima
( cislo / (1000*60*60*24*7) ) %2
To by mohlo byt ono, ne? Nezkouseno. Stejnym zpusobem bys mohl pocitat uplnek a tak.

x = ( cislo / (1000*60*60*24) ) %7;//den v tydnu
x = cislo.getDay();

akorat tam musis pocitat s tim, ze linuxove razitko zacina 1.1.1970 a pripocitat tudiz posun.
<script>
var t,d,x,y,z;
d = new Date();
t = d.getTime();
x = Math.floor(t/(1000*60*60*24));
x = (x+4) % 7; //den v tydnu
y = d.getDay();
z = new Date(1970,0,1);
z = z.getDay();
alert(x+" "+y+" "+z);
</script>
Cili rozdil aktualnich datumu pujde pocitat, ale rozdil s datumem pod 1970 muze mit zajimavy vysledek v ruznych prohlizecich, pokud s tim nepocitas predem.

Kazdopadne vysledek javascriptu je tentyz jako ma uzivatel nastaven. Uzivatel muze mit uz vanoce, ale na serveru je datum parneho leta v srpnu. Pak zobrazujes chybny udaj, jak to vysvetlis uzivateli?
Chtel si u tebe opravit cas a ty mu zobrazujes ten, co tam ma nastaveny. Chytre :)
Joker
Profil
peta
Jakym zpusobem pocitas pocet dnu v mesici?
Počet dnů v měsíci je daný (krom února), takže na to mám prostě pole:
var mesicDnu = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
a pak už není potřeba nic počítat, stačí mesicDnu[datum.getMonth()] a pokud je to únor a přestupný rok, tak +1.

Ad ten výpočet: jo, nějak podobně to dělám, akorát že ne podle časového razítka, ale počítám to od začátku daného roku.
Halluz-man
Profil *
Me vubec nenapadlo to zkouset v PHP. Pri hledani sem pokazdy zadal "neco skript" :).
Stejne sem nic nenasel.
A misto toho superdlouhyho cehosi zustanu u toho jednoho radku v php :)
peta
Profil
Joker
Ale na prestupny rok vypocet mas :) Tak potom je v celku jedno, jestli to pocitas

x = Math.floor(4+((new Date()).getTime())/(1000*60*60*24))) % 7;
nebo nejakym jinym vypoctem, kde zjistujes, zda je rok prestupny, cili tam je neco takoveho, zrejme:
x = Math.floor(ZZZ+((new Date()).getTime())/(1000*60*60*24))) % 4;

Samozrejme je to dobry tip s tim polem.
los
Profil *
Na čo je v tom výpočte tá štvorka?
Akú rolu hrá priestupnosť roku v čísle týždňa?
Akú rolu hrá počet dní v mesiaci v čísle týždňa?

Ak stačí určiť číslo týždňa od nejakého konkrétneho dátumu, tak to je jednoduché (cca 1 riadok). Ak ale treba určiť číslo týždňa v roku podľa normy ISO 8601, tak je to trochu zložitejšie (cca 15 riadkov).
Joker
Profil
peta
Ale na prestupny rok vypocet mas :)
LOL, polem by se mi to fakt dělat nechtělo :o))))

los
Ak stačí určiť číslo týždňa od nejakého konkrétneho dátumu, tak to je jednoduché (cca 1 riadok). Ak ale treba určiť číslo týždňa v roku podľa normy ISO 8601, tak je to trochu zložitejšie (cca 15 riadkov).
Vida, to jsem nevěděl, že je na to i ISO norma. Potom můj výpočet bude pro některé roky jinak, protože počítá 1. týden ten, ve kterém je 1. ledna, i když to je třeba v neděli. Tak to budu muset do roku 2010 ještě opravit :-)

Ale jestli číslo týdne od nějakého data jde na jeden řádek, tak ISO 8601 by mělo jít max. na dva řádky, protože to není nic jiného, než číslo týdne od prvního čtvrtka v daném roce.
los
Profil *
Joker
To by boli pekne dlhé dva riadky a asi by nestačili... :). Treba počítať aj s tým, že 31. december môže patriť do prvého týždňa nasledujúceho roku a 1. január môže patriť do posledného týždňa predchádzajúceho roku.

Napr. takto (dúfam, že tam nie je nejaká chyba):
function weekNumberIso8601(date) {
var begin = new Date(date.getFullYear(), 0, 1);
var end = new Date(date.getFullYear() + 1, 0, 1);
var dayms = 24 * 60 * 60 * 1000;
var beginDay = begin.getDay();
var endDay = end.getDay();
var offset = [1, 0, -1, -2, -3, 3, 2];

if (offset[beginDay] > 0 && (date - begin) / dayms < offset[beginDay])
begin.setYear(begin.getFullYear() - 1);
else if (offset[endDay] < 0 && (date - end) / dayms >= offset[endDay])
begin.setYear(begin.getFullYear() + 1);

begin.setDate(begin.getDate() + offset[begin.getDay()]);

return Math.floor((date - begin) / (7 * dayms)) + 1;
}

Šlo by to skrátiť na úkor prehľadnosti alebo efektívnosti, ale to nechám na iných.
Joker
Profil
los
Treba počítať aj s tým, že 31. december môže patriť do prvého týždňa nasledujúceho roku a 1. január môže patriť do posledného týždňa predchádzajúceho roku.
Ovšem při číslování týdnů se tomu dá vyhnout, stačí, když číslo týdne vypočítám pro ISO podle čtvrtka v daném týdnu- ten bude vždycky dobře (ten můj původní skript to počítá vždycky podle pondělka).

Jinak ale jsou naše tištěné kalendáře dělané podle téhle ISO normy? Minimálně mají na přelomu roku napsané třeba "53./1. týden" a skoro bych i řekl, že pokud je 1. ledna třeba sobota, některé ty dva dny číslují jako 1. týden... ale nejsem si tím jistý.
los
Profil *
Joker
Aha, máš pravdu, takže to vlastne ani nie je také zložité a sú to tie dva riadky:
function weekNumberIso8601(date) {
var thursday = new Date(date.getFullYear(), date.getMonth(), date.getDate() + 4 - (date.getDay() || 7));
return Math.floor((thursday - new Date(thursday.getFullYear(), 0, 1)) / (7 * 24 * 60 * 60 * 1000)) + 1;
}

Kalendáre by mali byť podľa tej normy, len neviem, či to vedia aj tí, čo ich vyrábajú.
peta
Profil
los
zcela logicky se sudy/lichy tyden musi pocitat podle 7 dni. Neznam tyden, ktery ma 8 dni. Cili je to nezavisle od prestupneho roku. Nemam zdani, co rika norma, mozna nejaky odkaz?

takze ti staci vypocet
x = Math.floor(4+((new Date()).getTime())/(1000*60*60*24*7))) % 2;
nebo tak nejak.

Ta 4, to jsem uvedl priklad, to ke prave to, ze casove razitko zacina 1.1.1970 - linuxovy cas.
viz
alert(x+" "+y+" "+z);
kde z vytvarim prave podle "1.1.1970", do date se to pise s mesic-1
Js, jestlize vis, ze "1.1.1970".getTime() = 0, pak musis take zjistit, ktery den v tydnu je "1.1.1970", aby jsi mohl provest korekci pro vypocet z poctu sekund.
Protoze "1.1.1970" jiste neni pondeli nebo nedele, jak "1.1.0001"
Joker
Profil
peta
ad norma: je problém si hodit do Googlu ISO 8601?
Jak jsem tu normu pochopil, počítá se podle čtvrtka, tj. 1. týden roku je ten, který obsahuje první čtvrtek v roce.
Např. když 1.1.2008 je úterý, 1. týden 2008 je 31.12.2007-6.1.2008.
Když 1.1.2006 byla neděle, týden 26.12.2005-1.1.2006 byl 53. týden 2006 a týden 2.1.2006-8.1.2006 byl 1. týden 2006

Z toho podle mě vyplývá, že ten výpočet podle timestamp nebude vždycky dávat správný výsledek: zatímco ten výpočet stále střídá sudé a liché týdny, jak je vidět z druhého příkladu, může nastat situace, že je lichý týden (53. předchozího roku) následovaný opět lichým týdnem (1. následujícího roku)
peta
Profil
Joker
linej :)
http://en.wikipedia.org/wiki/ISO_8601
Zrejme to tak je. Matematicky mi to prijde nelogicke, ale kdyz se tak dohodli...
V tom pripade to chce malou upravu vzorce. Mozna tu tvou, nezkoumal jsem ji. Az ji budu potrebovat, pak prozkoumam. Pravdepodobne ale pouziji PHP funkci a pripade prechodu dne vynutim pres JS refresh, abych mel spravny vikend.
peta
Profil
Tak, prave jsem to potreboval :)

Mutually equivalent definitions for week 01 are:

* the week with the year's first Thursday in it
* the week with 4 January in it
* the first week with the majority (four or more) of its days in the starting year
* the week starting with the Monday in the period 29 December - 4 January
* If 1 January is on a Monday, Tuesday, Wednesday or Thursday, it is in week 01. If 1 January is on a Friday, Saturday or Sunday, it is in week 52 or 53 of the previous year.

Myslim, ze z toho se celkem dobre bude pocitat
- 4.1. jestli je ve vikendu
- jestli je po 29.1.-4.1.
- jestli je 1.1. po,ut,st,ct

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0