Avatar billede hnteknik Novice
18. marts 2002 - 16:23 Der er 7 kommentarer og
1 løsning

Datosammenligning ved brug af Date.parse giver uventet resultat

Jeg har kæmpet en god del med at få sammenligning af tidspunkter til at virke.klokkeslettet er for så vidt vigtigt. Hvis jeg ikke lavede nedenstående ikke særlig kønne omvej virkede tidsdelen i hvert fald ikke og .getVarDate() tostring del ser jo heller ikke rigtig køn ud.

Problemet med nedenstående er:
deadline tidsmæssigt før Bookeddate --> intet problem

deadline tidsmæssigt efter Bookeddate ---> intet problem, hvis det blot er inden for samme måned i.e. Bookeddate = 31-03-2002 15:00:00 men ikke
01-04-2002 15:00:00.

Psykiatrisk hjælp søges, for nu er jeg stået af. Det kører somsagt som et Javascript på klienten. Jeg har ikke prøvet Jscrip på serveren, men det skulle vel ikke give en forskel ????

Skal jeg da til at lave det i VBscript ????

Hjælp - mit hår bliver gråt.

Henrik

PS frm.deadline.value kommer fra en record p.t access 2000 data objekt og står som tekst: 01-04-2002 15:00:00

PSS - det har for helvede ikke noget med US format at gøre: 17-03 læses som 03/17 og 01-04 læses som 01/04

Hvad gør jeg!
------

function ValidateForm(frm) {
var i;
var txtmsg = "";
var dato= new Date();
var dag = dato.getDate();
var md = dato.getMonth()+1;
var aar = dato.getYear();
var time = dato.getHours();
var minut = dato.getMinutes();
var sek = dato.getSeconds();
var Bookeddate = dag + "-" + md +"-" + aar + " " + time + ":" + minut + ":" + sek;
  //18-03-2002 15:00:00 //Bookdato.getVarDate();
if ( (Date.parse(Bookeddate)-0) - (Date.parse(frm.deadline.value)-0) > 0 )
        txtmsg += "Beklager men - Bookingtidspunktet "+ Bookeddate + " har overskredet deadline " + frm.deadline.value + "\n";
               
    //else
        //alert("Fint Nok - Bookingtidspunktet "+ Bookeddate + " har ikke overskredet deadline " + frm.deadline.value + "\n" );
        //alert(  (Date.parse(Bookeddate)-0) - (Date.parse(frm.deadline.value)-0)  );

--- osv.

Avatar billede cms Nybegynder
18. marts 2002 - 17:14 #1
function ValidateForm(frm) {
var i;
var txtmsg = "";
var dato= new Date();

if ( (Date.valueof()) - (Date.parse(frm.deadline.value)-0) > 0 )
        txtmsg += "Beklager men - Bookingtidspunktet "+ Bookeddate + " har overskredet deadline " + frm.deadline.value + "\n";
               
    //else
        //alert("Fint Nok - Bookingtidspunktet "+ Bookeddate + " har ikke overskredet deadline " + frm.deadline.value + "\n" );
        //alert(  (Date.parse(Bookeddate)-0) - (Date.parse(frm.deadline.value)-0)  );

--- osv.
Avatar billede cms Nybegynder
18. marts 2002 - 17:15 #2
undskyld! der skal ikke stå Date.valueof(), men dato.valueOf() - inklusive case-ændring :)
Håber det virker...
Avatar billede hnteknik Novice
19. marts 2002 - 12:01 #3
cms problemet er/var ikke dato objektet men formodentlig parse metoden fortolkning af frm.deadline.valuen - det var ikke en konsistent fortolkning.

Du skal have tak for forsøget anyway. Henrik

Jeg har løst problemet på følgende måde:

function checkDato(datostr) {
   
    var dd = parseInt( datostr.substring(0,2), 10);
    var dm = parseInt( datostr.substring(3,5), 10);
    var dy = parseInt( datostr.substring(6,10), 10);
    var dti = parseInt( datostr.substring(11,13), 10);
    var dmn = parseInt( datostr.substring(14,16), 10);
    var dsec = parseInt( datostr.substring(17,19), 10);

    //vi forudsætter her, at vi altid har 4 cifre
    if (isNaN(dmn)||isNaN(dsec) ) {
    dti=23;
    dmn=59;
    dsec=59; }

    if ( dy < 50 )          // så dette her er noget pjat
        dy += 2000
    else if ( dy <= 99)
    dy += 1900;
       
    var pdato = new Date( dy, dm-1, dd, dti, dmn, dsec );    // den givne dato og klokkeslet
    //alert( pdato.toString());
    var nudato = new Date();                  // lige nu
    var diff = nudato.valueOf() - pdato.valueOf();

    if ( diff > 0 ) {return true;} else {return false; }
}

function ValidateForm(frm) {
var i;
var txtmsg = "";
var dato= new Date();
var dag = dato.getDate();
var md = dato.getMonth()+1;
var aar = dato.getYear();
var time = dato.getHours();
var minut = dato.getMinutes();
var sek = dato.getSeconds();

var Bookeddate = dag + "-" + md +"-" + aar + " " + time + ":" + minut + ":" + sek;

   
var datooverskredet = checkDato(frm.deadline.value);
   
if ( datooverskredet)
    txtmsg += "Beklager men - Bookingtidspunktet "+ Bookeddate + " har overskredet deadline " + frm.deadline.value + "\n";
Avatar billede jakoba Nybegynder
19. marts 2002 - 12:05 #4
hnteknik >> Når du afviser er det en god ide at fortælle hvorfor. Ellers er det ikke til at komme videre med spørgsmålet.

mvh JakobA
Avatar billede jakoba Nybegynder
19. marts 2002 - 12:07 #5
Ups.  skrevet imens :)
Avatar billede hnteknik Novice
19. marts 2002 - 14:41 #6
jakoba >> Vi er fuldstændig enige. Som du kan se, har jeg lånt lidt hist og pist. Ikke kønt - men virker - vist -  nok - osse i morgen.

Henrik

BTW - ved at sætte LCID=1030 fåes tilsyneladende altid 2002, selvom man sætter windows op til DD-MM-YY som straks reflekteres i f.eks. Access
Avatar billede hnteknik Novice
20. marts 2002 - 10:51 #7
Lige for at runde den af:

Jeg tror, at dateobjectets parsemetode fejler på noget som f.eks. 13/04/02 og kaster en exception, som desværre ikke kan fanges.

Hold derfor fingere fra date parsemetoden, hvis man ikke er US citizen på en US machine.

Henrik
Avatar billede hnteknik Novice
02. april 2002 - 14:00 #8
Jeg lukker lige sagen. Ovenstående kører som en drøm
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