Script geeft foute jaaraanduiding in Firefox

Status
Niet open voor verdere reacties.

NIh1IlO

Gebruiker
Lid geworden
4 feb 2003
Berichten
759
Hello specialisten

ik gebruik onderstaand scriptje, dat een kalendertje moet weergegeven op de website, in één van mijn pagina's.
Hij doet het perfect in Internet Explorer.
In Firefox daarentegen geet hij een foute jaaraanduiding: er verschijnt 105 in plaats van 2005.
Wat is er loos en hoe kan eraan verholpen worden?

Met beste dank op voorhand voor de eventuele oplossing.

Groeten van nIh1IlO


<SCRIPT language=JavaScript>
<!-- for sucky browsers
Months = new Array(12);
Months[0] = "januari";
Months[1] = "februari";
Months[2] = "maart";
Months[3] = "april";
Months[4] = "mei";
Months[5] = "juni";
Months[6] = "juli";
Months[7] = "augustus";
Months[8] = "september";
Months[9] = "oktober";
Months[10] = "november";
Months[11] = "december";
function PadSpaces(TheString)
{
var Spaces = " ";
len = Math.round((9 - TheString.length)/2);
return Spaces.substring(0,len) + TheString;
}
function NumLeapYears(StartYear, EndYear)
{
var LeapYears, i;
if (EndYear >= StartYear){
for(LeapYears = 0; StartYear <= EndYear; StartYear++)
if (IsLeapYear(StartYear)) LeapYears++;
}else{
for(LeapYears = 0; EndYear <= StartYear; EndYear++)
if (IsLeapYear(EndYear)) LeapYears++;
}
return LeapYears;
}
function IsLeapYear(Year)
{
if(Math.round(Year/4) == Year/4){
if(Math.round(Year/100) == Year/100){
if(Math.round(Year/400) == Year/400)
return true;
else return false;
}else return true;
}
return false;
}
function Trim(TheString)
{
var len;
len = TheString.length;
while(TheString.substring(0,1) == " "){ //trim left
TheString = TheString.substring(1, len);
len = TheString.length;
}
while(TheString.substring(len-1, len) == " "){ //trim right
TheString = TheString.substring(0, len-1);
len = TheString.length;
}
return TheString;
}
function DetermineMonthIdx()
{
var i, month, month_s, len;
month = Trim(document.calform.elements[4].value);
len = month.length;
for( i = 0; i <12; i++){
month_s = Months.substring(0,len);
if (month_s.toUpperCase() == month.toUpperCase())
return (i);
}
return -1;
}
function FindNewYearStartingDay(Year)
{
var LeapYears, Years, Day;
LeapYears = NumLeapYears(1995, Year);
if (Year >=1995)
Years = (Year -1995)+LeapYears;
else Years = (Year -1995)-LeapYears;
if (Year >=1995)
Day = Math.round(((Years/7 - Math.floor(Years/7))*7)+.1);
else Day = Math.round(((Years/7 - Math.ceil(Years/7))*7)-.1);
if (Year >=1995){
if(IsLeapYear(Year)) Day--;
}else Day += 7;
if(Day < 0) Day = 6;
if(Day > 6) Day = 0;
return Day;
}
function FindNumDaysInMonth(Year, Month)
{
if(Month == 1){
if(IsLeapYear(Year)) return 29;
else return 28;
}else{
if(Month >6) Month++;
if(Month/2 == Math.round(Month/2)) return 31;
}
return 30;
}
function FindMonthStartDay(NewYearDay, Year, Month)
{
var MonthStartDay;
AddArray = new Array(12);
AddArray[0]=0;AddArray[1]=3;AddArray[2]=3;AddArray[3]=6;
AddArray[4]=1;AddArray[5]=4;AddArray[6]=6;AddArray[7]=2;
AddArray[8]=5;AddArray[9]=0;AddArray[10]=3;AddArray[11]=5;
MonthStartDay = NewYearDay + AddArray[Month];
if(IsLeapYear(Year) && (Month ) > 1) MonthStartDay ++;
if (MonthStartDay > 6) MonthStartDay -= 7;
return MonthStartDay;
}
function FillCalendar()
{
var Year, Month, Midx, NewYearDay, MonthStartDay;
var NumDaysInMonth, i, t;
Year = parseFloat(document.calform.elements[1].value);
Month = document.calform.elements[4].value;
Midx = DetermineMonthIdx();
if (Midx == -1){
alert ("Herken die maand niet, probeer opnieuw");
return;
}
NewYearDay = FindNewYearStartingDay(Year);
MonthStartDay = FindMonthStartDay(NewYearDay, Year, Midx);
NumDaysInMonth = FindNumDaysInMonth(Year, Midx);
for(i = 6; i < 43; i++){
t = i-5-MonthStartDay;
if ( t >= 1 && t <= NumDaysInMonth)
document.calform.elements.value =t;
else document.calform.elements.value = "";
}
}
function IncDecYear(val)
{
var valNum = parseInt(val);
var valNum2 = parseInt(document.calform.elements[1].value)
document.calform.elements[1].value = valNum2 + valNum;
FillCalendar()
}
function IncDecMonth(val)
{
var valNum = parseInt(val);
var Midx = DetermineMonthIdx();
Midx += valNum;
if(Midx > 11) Midx = 0;
if(Midx < 0) Midx = 11;
document.calform.elements[4].value = PadSpaces(Months[Midx]);
FillCalendar()
}
// -->
</SCRIPT>
 
Ik denk dat je ergens .getYear() gebruikt, als je .getFullYear() neemt dan geeft Fx ook 2005.

Fouten heb ik niet gevonden in je script maar een aantal functies kan wel kleiner: :)
PHP:
var Months = ['januari','februari','maart','april','mei','juni',
 'juli','augustus','september','oktober','november','december'];


function IsLeapYear(Year) {
 if (Year % 400 == 0) return true;
 if (Year % 100 == 0) return false;
 if (Year % 4 == 0) return true;
 return false;
 };


function Trim(TheString) {
 return TheString.replace(/^ +/,'').replace(/ +$/,'');
 };


function FindNewYearStartingDay(Year) {
 return new Date(Year,0,1).getDay();
 };


function FindMonthStartDay(NewYearDay,Year,Month) {
 return new Date(Year,Month,1).getDay();
 };


function NumLeapYears(StartYear,EndYear) {
 var LeapYears = 0, tmp;
 if (EndYear < StartYear) {
  tmp = EndYear; EndYear = StartYear; StartYear = tmp;
  };
 for (var i = StartYear; i <= EndYear; i++) if (IsLeapYear(i)) LeapYears++;
 return LeapYears;
 };


function FindNumDaysInMonth(Year,Month) {
 var NumDays = [31,28,31,30,31,30,31,31,30,31,30,31];
 if (IsLeapYear(Year)) NumDays[1] = 29;
 return NumDays[Month];
 };
Als je een link naar de pagina hebt, of het als bijlage post, is het beter te zeggen wat er mis gaat.


Vr.Gr. Egel.
 
Laatst bewerkt:
Hello Egel

je had het bij het rechte eind: ik heb op twee lijnen (4673 en 4675) getYear vervangen door getFullYear en het probleem is blijkbaar opgelost.
Mocht je eventueel nog onnauwkeurigheden aantreffen, dan neem ik ze ook graag in ontvangst.
Ik denk echter eerlijkheidshalve dat ik de vraag als opgelost moet weergeven.

Vriendelijk groeten voor het meedenken

nIh1IlO
 
Het was idd .getYear(). :)

Je kunt nog bovenstaande slankere functies gebruiken maar in principe werken die hetzelfde. Ik heb daar nog wel FindNumDaysInMonth aangepast, daar zat een foutje in.

En bij de functie IncDecMonth kun je:
if(Midx > 11) { Midx = 0; document.calform.elements[1].value++;};
if(Midx < 0) { Midx = 11; document.calform.elements[1].value--;};
gebruiken zodat het jaartal meegaat.


Vr.Gr. Egel.
 
Hoi Egel

nogmaals van harte bedankt.

Ik hou rekening met je adviezen!

nIh1IlO
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan