Avatar billede kjetilh Nybegynder
06. januar 2004 - 16:06 Der er 7 kommentarer og
1 løsning

finne "høyeste" dato ved hjelp av javascript

Jeg har et problem hvor jeg har følgende html kode:

<form action='xxxx.php' method='post' name='dateform'>
<input type='hidden' name='dep_0' value='2003-01-01'>
<input type='hidden' name='dep_1' value='2003-02-21'>
<input type='hidden' name='dep_2' value='2003-03-12'>
<input type='hidden' name='dep_3' value='2003-02-31'>
<input type='date' name='p_start' value='2003-12-13'>

<input type='radio' name='change' value='copy' onClick="if (this.checked) {checkdate(4)}">Find Latest Date</form>

function checkdate(dep_num)
{
  var new_date = "0000-00-00";
  for ( var i=0; i <= dep_num; i++)
  {
    var check_date = window.document.dateform.dep_i.value;
    if ( check_date >= new_date)
      new_date = check_date;
  }
  window.document.dateform.p_start.value = new_date+1;
}   
---------------------------------------------
Problemet er todelt:
1. Jeg vet ikke hvor mange hidden inputs det skal være, så derfor trenger jeg en for-sløyfe som sjekker alle datoene. "for" sløyfen jeg bruker fungerer ikke.
2. Hvordan får jeg sjekket hvilke dato som er størst og lagt til 1 dag ekstra?

100 points til den som kan hjelpe meg med dette.
Avatar billede roenving Novice
06. januar 2004 - 16:22 #1
check_date = window.document.dateform.elements['dep_'+i].value;

-- og ikke en ny var hver gang !-)
Avatar billede skovenborg Nybegynder
06. januar 2004 - 17:53 #2
prøv den her som checker datoen (ud fra Date-objectet) og lægger en dag til:
function checkdate(dep_num)
{
  var new_date = new Date(1970,00,00);
  for ( var i=0; i <= dep_num; i++)
  {
    var date_arr = document.dateform.elements['dep_'+i].value.split("-");
    var check_date = new Date(parseInt(date_arr[0]),parseInt(date_arr[1]),parseInt(date_arr[2]));
    if ( check_date.getTime() >= new_date.getTime())
      new_date = check_date;
  }
  new_date.setDate(new_date.getDate()+1);
  window.document.dateform.p_start.value = new_date.getYear()+"-"+(new_date.getMonth())+"-"+new_date.getDate();
}
Avatar billede skovenborg Nybegynder
06. januar 2004 - 17:57 #3
nåja, og så vil du sikkert også have at den skriver nul foran når måneden eller datoen er under 10:
function checkdate(dep_num)
{
  var new_date = new Date(1970,00,00);
  for ( var i=0; i <= dep_num; i++)
  {
    var date_arr = document.dateform.elements['dep_'+i].value.split("-");
    var check_date = new Date(parseInt(date_arr[0]),parseInt(date_arr[1]),parseInt(date_arr[2]));
    if ( check_date.getTime() >= new_date.getTime())
      new_date = check_date;
  }
  new_date.setDate(new_date.getDate()+1);
  window.document.dateform.p_start.value = new_date.getYear()+"-";
  window.document.dateform.p_start.value += (new_date.getMonth() < 10) ? "0"+new_date.getMonth()+"-" : new_date.getMonth()+"-";
  window.document.dateform.p_start.value += (new_date.getDate() < 10) ? "0"+new_date.getDate() : new_date.getDate();
}

I det eksempel du viser skal du forresten også kun skrive:
onClick="if (this.checked) {checkdate(4)}"
istedet for 4, da der slet ikke er så mange elementer.
Avatar billede kjetilh Nybegynder
07. januar 2004 - 09:54 #4
fungerer bra, men hvis new_date er 2004-01-31 så blir new_date.setDate(new_date.getDate()+1) 2004-01-32 og det er dag som ikke fins. Hvordan får man den til å skifte til neste månede slik at den nye datoen blir 2004-02-01??
Avatar billede skovenborg Nybegynder
07. januar 2004 - 13:26 #5
2004-01-31 eksisterer heller ikke - månederne tæller nemlig fra 0 af dvs. at 2004-01-31 er den 31 februar.

Der er endnu en bug i og det er getYear() som returnerer 103 i mozilla (når det er år 2003). Sådan står der faktisk også i netscapes javascript reference, men IE overholder har jo lavet deres egen javascript "standard". Det fulde script er altså:

function checkdate(dep_num)
{
  var new_date = new Date(1970,00,00);
  for ( var i=0; i <= dep_num; i++)
  {
    var date_arr = document.dateform.elements['dep_'+i].value.split("-");
    var check_date = new Date(parseInt(date_arr[0]),parseInt(date_arr[1])-1,parseInt(date_arr[2]));
    if ( check_date.getTime() >= new_date.getTime())
      new_date = check_date;
  }
  new_date.setDate(new_date.getDate()+1);
  window.document.dateform.p_start.value = new_date.getFullYear()+"-";
  window.document.dateform.p_start.value += (new_date.getMonth() < 10) ? "0"+(new_date.getMonth()+1)+"-" : (new_date.getMonth()+1)+"-";
  window.document.dateform.p_start.value += (new_date.getDate() < 10) ? "0"+new_date.getDate() : new_date.getDate();
}
Avatar billede kjetilh Nybegynder
07. januar 2004 - 14:39 #6
hvis man i tillegg erstatter
new_date.setDate(new_date.getDate()+1);

med
new_date = Date.parse(new_date) + (i*24*60*60*1000);
new_date = new Date(new_date);

Så blir ting straks mye bedre ;D
Legg igjen et svar skovenborg så skal du få dine points for god hjelp ;D
Avatar billede skovenborg Nybegynder
07. januar 2004 - 14:48 #7
det var så lidt :-)
Avatar billede skovenborg Nybegynder
14. februar 2004 - 16:37 #8
(husk lige at lukke ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester