SWiSH Forum Strona Główna SWiSH Forum
Forum użytkowników programów SWiSH

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy  StatystykiStatystyki
RejestracjaRejestracja  ZalogujZaloguj  DownloadDownload

Poprzedni temat «» Następny temat
Zliczanie dni - wersja 2
Autor Wiadomość
roland 
Site Admin
Roland Zimek



Wersja SWiSH: Max4
Pomógł: 31 razy
Wiek: 58
Dołączył: 21 Sty 2005
Posty: 424
Skąd: Opole
Wysłany: Czw 30 Cze, 2005 10:57   Zliczanie dni - wersja 2

Jakiś czas temu umieściłem na Forum skrypt pozwalający obliczyć ile dni pozostało do końca roku:
http://swish.wodip.opole....topic.php?t=177
Jednak problem pozostał, gdyż wiele osób nie potrafiło przerobić podany skrypt do innego rodzaju obliczeń, na przykład aby obliczyć ile dni upłynęło od początku roku, itp.

Dlatego też postanowiłem napisać uniwersalny skrypt, potrafiący wykonać wiele różnych rodzajów obliczeń na datach. Znajduje się on w dziale Download, pod adresem:
http://swish.wodip.opole....ction=file&id=9
a także do pobrania na końcu tej wiadomości.

W pliku ZIP znajduje się plik IleDni2 OPIS.txt, zawierający dokładny opis zdefiniowanych zmiennych i funkcji.

Wszystkie funkcje mogą być wywoływane samodzielnie, w razie zaistniałej potrzeby.

Z ciekawostek: można obliczyć ile dni minęło od Waszego dnia urodzin i nawet jaki był to dzień tygodnia :D . Niestety w tej wersji skrypt nie potrafi jeszcze obliczyć ile dni pozostało do śmierci :cry:

(!) UWAGA. Aby zbytnio nie rozbudowywać skryptu, nie jest on zabezpieczony przed podawaniem nieprawdziwych dat. Mogą wtedy wystąpić błędy lub funkcje mogą podawać nieprawdziwe wyniki. Wyniki powinny być obliczane poprawnie dla dat powyżej 1582 roku, kiedy to nastąpiło wprowadzenie kalendarza gregoriańskiego.

Poniżej podaję kod, który umieściłem w Scene1, dzięki czemu, można go skopiować i wkleić do gotowej już animacji, rozbudowywując ją o podane funkcje:

Kod:
onLoad () {
    //(c)2005 Roland Zimek
    //http://forum.swish.pl
   
    DniWMiesiacu = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    DniTygodnia = new Array("poniedziałek","wtorek","środa","czwartek","piątek","sobota","niedziela");
    NazwyMiesiaca = new Array("styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień");
    NazwyMiesiacaWDopelniaczu = new Array("stycznia","lutego","marca","kwietnia","maja","czerwca","lipca","sierpnia","września","października","listopada","grudnia");
    data = new Date();
    DzisDzien = data.getDate();
    DzisMiesiac = data.getMonth()+1;
    DzisRok = data.getFullYear();
}
function IleDniWRoku(rok) {
    if (((rok % 400) == 0) || ((rok % 4) == 0) && (rok % 100) <> 0) {
        return 366;
    } else {
        return 365;
    }
}
function IleDniWMiesiacu(miesiac,rok) {
    IleDni=_root.DniWMiesiacu[miesiac-1];
    if (miesiac==2 && _root.IleDniWRoku(rok)==366) {
        IleDni=29;
    }
    return (IleDni);
}
function IleDniOdPoczatkuRoku(dzien,miesiac,rok) {
    suma=0;
    for (i=1; i<miesiac; i++) {
        suma+=_root.IleDniWMiesiacu(i,rok);
    }
    suma+=Dzien-1;
    return (suma);
}
function IleDniDoKoncaRoku(dzien,miesiac,rok) {
    suma=0;
    for (i=miesiac; i<13; i++) {
        suma+=_root.IleDniWMiesiacu(i,rok);
    }
    suma-=dzien;
    return (suma);
}
function IleDniPomiedzyDatami(dzien1,miesiac1,rok1,dzien2,miesiac2,rok2) {
    if (rok1>rok2 || (rok1==rok2 && miesiac1>miesiac2) || (rok1==rok2 && miesiac1==miesiac2 && dzien1>dzien2)) {
        dd=dzien2;
        mm=miesiac2;
        rr=rok2;
        dzien2=dzien1;
        miesiac2=miesiac1;
        rok2=rok1;
        dzien1=dd;
        miesiac1=mm;
        rok1=rr;
    }
    suma=0;
    if (rok1<rok2) {
        suma+=_root.IleDniDoKoncaRoku(dzien1,miesiac1,rok1)+1;
        suma+=_root.IleDniOdPoczatkuRoku(dzien2,miesiac2,rok2);
        for (i=rok1+1; i<rok2; i++) {
            suma+=_root.IleDniWRoku(i);
        }
    } else if (rok1==rok2) {
        suma=_root.IleDniOdPoczatkuRoku(dzien2,miesiac2,rok2)-_root.IleDniOdPoczatkuRoku(dzien1,miesiac1,rok1);
    }
    return (suma);
}
function DzienTygodnia(dzien,miesiac,rok) {
    RoznicaDni=(5+IleDniPomiedzyDatami(1,1,1583,dzien,miesiac,rok))%7;
    return (_root.DniTygodnia[RoznicaDni]);
}
function NazwaMiesiaca(miesiac) {
    return (_root.NazwyMiesiaca[miesiac-1]);
}
function NazwaMiesiacaWDopelniaczu(miesiac) {
    return (_root.NazwyMiesiacaWDopelniaczu[miesiac-1]);
}


Czekam na Wasze sugestie, co do dalszej rozbudowy skryptu

[ Dodano: Pią 23 Cze, 2006 11:45 ]
Dostałem na PW prośbę o napisanie skryptu obliczającego ilość lat i miesiący, jakie upłynęły pomiędzy podanymi datami. Umieszczę go tu, bo może komuś się jeszcze przyda. Jak widać jest to znacznie uproszczona wersja poprzedniego skryptu.

Kod:
onLoad () {
    //(c)2006 Roland Zimek
    //http://forum.swish.pl
    data = new Date();
    DzisDzien = data.getDate();
    DzisMiesiac = data.getMonth()+1;
    DzisRok = data.getFullYear();
    trace(IleMamLat(6,6,2005,6,6,2006));
    trace(IleMamMiesiecy(6,6,2005,6,6,2006));
}
function IleMamLat(dzien1,miesiac1,rok1,dzien2,miesiac2,rok2) {
    if (miesiac1>miesiac2 || (miesiac1==miesiac2 && dzien1>dzien2)) {
        return (rok2-rok1-1);
    } else {
        return (rok2-rok1);
    }
}
function IleMamMiesiecy(dzien1,miesiac1,rok1,dzien2,miesiac2,rok2) {
    if (dzien1<=dzien2) {
        return (miesiac2-miesiac1);
    } else {
        return (-(13-miesiac2-miesiac1));
    }
}


Można oczywiście połączyć oba skrypty, w tym celu do pierwszego z nich (tego dłuższego), należy wkleić tyko same funkcje z drugiego skryptu.
 
     
nic3 
Bywalec



Dołączył: 14 Wrz 2009
Posty: 11
Skąd: Kraków
Wysłany: Pon 14 Wrz, 2009 22:32   

Próbowałem przerobić licznik, który znajduje się w przykładach
programu SwishMax, aby liczył czas do zakończenia roku szkolnego
2009/2010 (jest to dzień 25 VI 2010), a nie czas do końca bieżącego
roku. Nie udało mi się to do końca, gdyż ilość dni się nie zgadza, czy
mógłbyś zobaczyć co źle przerobiłem? Poniżej podaje link do "mojego"
licznika:
http://wyslijto.pl/plik/3r5fqcsyro

Pozdrawiam nic3;)
 
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  


Powered by phpBB modified by Przemo © 2003 phpBB Group
Nowe zasady dotyczące cookies. Wykorzystujemy pliki cookies, aby nasz serwis lepiej spełniał Państwa oczekiwania. Można zablokować zapisywanie cookies, zmieniając ustawienia przeglądarki.
         
Strona wygenerowana w 0.11 sekundy. Zapytań do SQL: 15