|
SWiSH Forum Forum użytkowników programów SWiSH |
|
Skrypty do programu SWiSH2 i SWISHmax - Zliczanie dni - wersja 2
roland - Czw 30 Cze, 2005 10:57 Temat postu: 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 . Niestety w tej wersji skrypt nie potrafi jeszcze obliczyć ile dni pozostało do śmierci
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 - 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;)
|
|