Autor Zpráva
Rapeman
Profil
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
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
Ještě mě napadlo:

výsledek roků: pokud dá dohromady celých 12 proměnných = přidá do kolonky roků 1
Tomasds
Profil
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
Rapeman
Abych byl konkrétní. Jaký výsledek by sis představovat při datech 10.1. a 25.2. ?
los
Profil *
> 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
los
Zřejmý? Takže .. jaký?
los
Profil *
1 mesiac a 15 dní. Čakal si nejaký iný výsledok?
Tomasds
Profil
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 *
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
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 *
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
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
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 *
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
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 *
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
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 *
— Moderátor (Ch): Nesouvisející dotaz jsem přesunul. —

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0