Autor | Zpráva | ||
---|---|---|---|
Rapeman Profil |
#1 · Zasláno: 29. 10. 2008, 19:09:23
Ahoj,
rád bych do své stránky chtěl vložit informaci o věku pejska. Představoval bych si to takhle: Místo "Dnes je mi 74 dní" by se zobrazilo "Dnes mi je 2 měsíce a 13 dní. Prosím Vás o napsání příkladu. Všem dopředu MOC děkuji :) |
||
Tomasds Profil |
Už máš odpověď na mou otázku tady?
Nejdřív vyřeš jak to počítat, pak se můžeš zamýšlet, jak to naprogramovat. edit: zopakuju otázku, abych ostatním ušetřil jedno kliknutí: Co kdyby to datum narození bylo 31. ledna? Kdy mu bude jeden měsíc? 31. únor neexistuje. ok, takže měsíc mu je za 30 dnů? Nebo za 31? — Moderátor (M): Oprava odkazu. Původní totiž vedl na tuto stránku. — |
||
Rapeman Profil |
#3 · Zasláno: 30. 10. 2008, 08:03:44
Jasně Tomasdsi,
- vložit 12 proměnných (12 měsíců) s jejich počtem dní. - vložit datum narození datum narození je třeba 23.7.2008 a dnes je 30.10.2008 příklad: zkontroluje rok (nynější rok - rok narození = 0 roků), poslední nekompletní měsíc se pokusí doplnit z prvních 8 dnů z července, takže to bude 3 měsíce, a zbylých 7 dní. výsledek by měl být 0 roků, 3 měsíce, 7 dní. Snad se v tom každý vyzná. Předem díky za každý příklad. Pája73 |
||
Rapeman Profil |
#4 · Zasláno: 30. 10. 2008, 08:28:14
Ještě mě napadlo:
výsledek roků: pokud dá dohromady celých 12 proměnných = přidá do kolonky roků 1 |
||
Tomasds Profil |
#5 · Zasláno: 30. 10. 2008, 21:45:26 · Upravil/a: Tomasds
Rapeman
V tom příkladu máš chybu, ale myslím že se to pochopit dá. Pokud ti nevadí, že od 15.2. do 15.3. bude výsledek 1 měsíc stejně jako od 15.3. do 15.4. přestože v počtu dní se to liší minimálně o 1 (což je celá podstata problému, měsíc jako časová jednotka je nesmysl), tak řešení by bylo toto: - vložit 12 proměnných (12 měsíců) s jejich počtem dní (ano, souhlasím) pak zjistíš, jestli ta dvě data jsou ve stejném měsíci stejného roku. Pokud ano, výsledek = den druhého - den prvého Pokud ne: počet měsíců = 12*rok2+měsíc2 - (12*rok1+měsíc1) počet dnů = počet zbývajících dnů do konce měsíce prvého data + den druhého data Přestupné roky si budeš muset ošetřit. Jak naložíš s tím, když součet těch dnů bude dejme tomu 40? Prohlásíš to za měsíc a 10 dní? Nebo měsíc a 9 dní? edit: Mistr: děkuju, pomotalo se mně to asi ve schránce :) |
||
Tomasds Profil |
#6 · Zasláno: 30. 10. 2008, 21:51:49
Rapeman
Abych byl konkrétní. Jaký výsledek by sis představovat při datech 10.1. a 25.2. ? |
||
los Profil * |
#7 · Zasláno: 30. 10. 2008, 23:04:05
> Jaký výsledek by sis představovat při datech 10.1. a 25.2. ?
Podľa mňa je ten výsledok v tomto prípade zrejmý. Alebo myslíš, že existuje viacero možností? |
||
Tomasds Profil |
#8 · Zasláno: 30. 10. 2008, 23:14:54
los
Zřejmý? Takže .. jaký? |
||
los Profil * |
#9 · Zasláno: 30. 10. 2008, 23:20:36
1 mesiac a 15 dní. Čakal si nejaký iný výsledok?
|
||
Tomasds Profil |
#10 · Zasláno: 30. 10. 2008, 23:32:21
los
Asi máš pravdu, trochu jsem to překombinoval. Úvaha byla taková, že ani jeden měsíc není celý, takže počítám počet dnů do konce měsíce a počet dnů od začátku druhého měsíce a sečtu. Pak mi ale odpověz na otázku v #2. |
||
los Profil * |
#11 · Zasláno: 30. 10. 2008, 23:40:12
V otázke #2 sa pýtaš, kedy bude mať 1 mesiac, čo je trochu iná otázka, ako rozdiel medzi dvomi dátumami. Ale keď sa na to pozriem logicky, tak na konci februára bude mať 28 (alebo 29) dní a na začiatku marca to bude už 1 mesiac a 1 deň. Takže odpoveďou by mohlo byť, že 1 mesiac bude mať na konci februára.
|
||
Tomasds Profil |
#12 · Zasláno: 30. 10. 2008, 23:45:27
Ano, je to jiná otázka.
A to proto, že zadání nelze podle mého názoru vyřešit jedním algoritmem. |
||
los Profil * |
#13 · Zasláno: 30. 10. 2008, 23:51:34
Je to ako keby si sa pýtal, kedy bude mať prvé narodeniny niekto, kto sa narodil 29.2. Pritom na otázku, že koľko má rokov, existuje vždy jednoznačná odpoveď.
Algoritmus, ktorý by som použil na výpočet rozdielu medzi dátumami, by mohol vyzerať asi takto: http://los.php5.cz/jpw/rozdiel-datumov.html |
||
Rapeman Profil |
#14 · Zasláno: 31. 10. 2008, 07:34:39
Losi, tohle vypadá dost dobře! Zkusím si to doupravit, aby nebylo potřeba datumy vkládat, ale program by si je zjistil sám. Móóóóć děkuji. Rapeman
|
||
Rapeman Profil |
#15 · Zasláno: 31. 10. 2008, 08:04:27
Hmm, Losi promiň, chtěl sem si to už doupravit, ale přecenil sem se.
Jěště Tě prosím o pomoc. Chtěl bych, aby se na mé stránce objevil jen text "0 roků, 3 měsíce, 5 dní". Datum začátku by měl být daný ve zdroji (aby se dal upravit) a datum konečný by měl být dnešní datum (script by si ho zjistil sám). Ještě Tě jednou prosím o pomoc. Móóć děkuji. Rapeman |
||
los Profil * |
#16 · Zasláno: 31. 10. 2008, 10:51:24
Napr.:
function getDiffText(begin, end) { /* tu vložíš telo funkcie pre zistenie rozdielu */ } document.write(getDiffText(new Date(2008, 7-1, 23), new Date())); |
||
Rapeman Profil |
#17 · Zasláno: 31. 10. 2008, 16:39:18
Takže to bude vypadat asi takhle.
<script type="text/javascript"> function getDiffText(begin, end) { var inflect = function(n, args) { return args[(n = Math.abs(n)) == 1 ? 0 : (1 < n && n < 5 ? 1 : 2)].replace(/%/g, n); } var daysInPreviousMonth = function(date) { return new Date(date.getFullYear(), date.getMonth(), 0).getDate(); } var years = end.getFullYear() - begin.getFullYear() - (end.getMonth() < begin.getMonth() || end.getMonth() == begin.getMonth() && end.getDate() < begin.getDate()); var months = (end.getMonth() - begin.getMonth() - (end.getDate() < begin.getDate()) + 12) % 12; var days = begin.getDate() <= end.getDate() ? end.getDate() - begin.getDate() : Math.max(0, daysInPreviousMonth(end) - begin.getDate()) + end.getDate(); return [inflect(years, ["% rok", "% roky", "% roků"]), inflect(months, ["% měsíc", "% měsíce", "% měsíců"]), inflect(days, ["% den", "% dny", "% dní"])].join(", "); } var getDate = function(text) { var dmy = text.split("-"); return new Date(dmy[0], (dmy[1] || 0) - 1, (dmy[2] || 0)); } var updateDiff = function(form) { var begin = getDate(form.begin.value); var end = getDate(form.end.value); form.diff.value = end - begin >= 0 ? getDiffText(begin, end) : "--"; } var onchange = function() { var date = getDate(this.value); var pad = function(x) { return (x < 10 ? "0" : "") + x; }; if (this.value == [date.getFullYear(), pad(date.getMonth() + 1), pad(date.getDate())].join("-")) { this.className = "text"; updateDiff(this.form); } else { this.className = "invalid text"; this.form.diff.value = "--"; } } document.write(getDiffText(new Date(2008, 7-1, 23), new Date())); </script> V posledním řádku v závorce: 2008 je rok, 7 je měsíc, -1 NECHAT, 23 je den Moc Ti děkuji Losi! :) |
||
patrikšimek Profil * |
#18 · Zasláno: 2. 11. 2008, 15:08:01
AHOJ, jak ty dny přepočítám na roky, ted tam je: Uběhlo 5319 dnů, 8 hodin, 17 minut a 32 sekundy, ale já bych chtěl místo těch 5319 dnů mít roky, takže uběhlo xxxx roků, xxxxdnů, xx hodin, xx minut a xx sekundy. díky moc za radu. a ještě jedna otázka, funguje to přesně, podle mě ne, já si tam zadal proměnou kdy jsem se narodil a ono to ukazuje 14 let (když dny vydělím 365) i přes to, že jsem tam zadal 1992, tudíž by tam mělo být 16 let. díky za vysvětlení.
|
||
Rapeman Profil |
#19 · Zasláno: 2. 11. 2008, 16:01:32
Ahoj Losi,
Ještě jednou děkuji a přidal sem Tě jako autora scriptu do mého zdrojáku. :) Mrkni: www.tomik-pes.wbs.cz Ještě jednou díky. Rapeman |
||
X-Ray Profil * |
|||
Časová prodleva: 15 let
|
0