Avatar billede donslund Nybegynder
01. januar 2005 - 14:47 Der er 16 kommentarer og
2 løsninger

Dato minus dato

Jeg vil gerne vide hvor lang tid der er gået siden en hvis dato.

Jeg kan jo sagtens finde de to tidspunkters millisekunder siden 1970 og trække dem fra hinanden. Det jeg ikke fatter er, hvordan man kringler skudår, ulige antal dage i måneder og så videre.
Avatar billede donslund Nybegynder
01. januar 2005 - 15:02 #1
Jeg kigger lidt på denne: http://www.flashkit.com/movies/Utilities/Time/Countdow-kristof_-7394/index.php

Men det er jo en CountDOWN og ikke en CountUP.
Avatar billede barklund Nybegynder
01. januar 2005 - 15:10 #2
Hvad skal du vide? Forskellen mellem de to datoer i år, måneder, dage, timer, minutter og sekunder eller noget i den stil?
Avatar billede donslund Nybegynder
01. januar 2005 - 15:15 #3
jeps.
Siden d. 28. juli 1985 er der gået x antal dage, x antal måneder, x antal dage, x antal minutter og x antal sekunder.

timer, minutter og sekunder er ikke så vanskelige. Det er jo samme antal i hvert døgn. Men hvad med 30/31 dage og skudår?
Avatar billede pyroman Nybegynder
01. januar 2005 - 16:35 #4
Det klarer flash's dato objekt selv:

Her er actionscript-måden at gøre det på:


var finalDate = new Date(2006, 0, 1, 0, 0, 0); // Næste nytår!!
var now = new Date();
var timeToGo = new Date(finalDate-now);
var y = timeToGo.getFullYear()-1970;
var m = timeToGo.getMonths();
var d = timeToGo.getDate();
var hr = timeToGo.getHours();
var min = timeToGo.getMinutes();
var sec = timeToGo.getSeconds();
trace(y+" år "+m+" måneder "+d+" dage "+hr+" timer "+min+" minutter "+sec+" sekunder");
Avatar billede barklund Nybegynder
01. januar 2005 - 16:59 #5
pyroman, den holder jo ikke ;)

Du finder jo bare forskellen mellem de to tidspunkter i millisekunder og laver det til et nyt dato-objekt og altså finder ud af, hvor mange år, dage og måneder dette tidsrum svarer til, målt fra 1. januar 1970.

Hvad hvis vi skal finde forskellen mellem 1. februar og 1. marts. Der er præcis 1 måned - hverken mere eller mindre. Men med din metode giver det jo i skudår 0 måneder og 30 dage mens det i ikke-skudår giver 0 måneder og 29 dage - begge dele burde jo giver 1 måned og 0 dage:

var før = new Date(2004,1,1); // 1. februar
var efter = new Date(2004,2,1); // 1. marts
var forskel = new Date(efter-før);
trace("antal måneder: "+forskel.getMonth());  // 0
trace("antal dage: "+forskel.getDate());      // 30
var før = new Date(2005,1,1); // 1. februar
var efter = new Date(2005,2,1); // 1. marts
var forskel = new Date(efter-før);
trace("antal måneder: "+forskel.getMonth());  // 0
trace("antal dage: "+forskel.getDate());      // 29

Derfor er det ikke helt godt nok. Man er nødt til at gå hver enkelt attribut igennem og finde forskellen. Det er lige bøvlet, men jeg finder lige en løsning. :)

--
Morten Barklund
Avatar billede pyroman Nybegynder
01. januar 2005 - 17:56 #6
Har rodet lidt med det og nogle kalender funktioner jeg har lavet engang:


var d1 = new Date(2005, 3, 8);
var d2 = new Date(2005, 4, 2);

function tidsForskel(d1, d2){
    var dato1 = new Date(Math.min(d1,d2));
    var dato2 = new Date(Math.max(d1,d2));
    var years = dato2.getFullYear()-dato1.getFullYear();
    var months = dato2.getMonth()-dato1.getMonth();
    var days = dato2.getDate()-dato1.getDate();
    var hours = dato2.getHours()-dato1.getHours();
    var minutes = dato2.getMinutes()-dato1.getMinutes();
    var seconds = dato2.getSeconds()-dato2.getSeconds();
   
    if(seconds < 0){
        minutes--;
        seconds = 60+seconds;
    }
    if(minutes < 0){
        hours--;
        minutes = 60+minutes;
    }
    if(hours < 0){
        days--;
        hours = 24+hours;
    }
    if(days < 0){
        months--;
    }
    if(months < 0){
        years--;
        months = 12+months;
    }
    if(days < 0)
        days = getNumberOfDaysInMonth(years, months)+days;
       
    trace(years+" - "+months+" - "+days+" - "+hours+" - "+minutes+" - "+seconds);
}

function getNumberOfDaysInMonth(year, month){
    var n;
    if(month == 1){
        if(((year % 4 == 0) && (year % 100 != 100)) || (year % 400 == 0))
            n = 29;
        else
            n = 28;
    }else if (month == 3 || month == 5 || month == 8 || month == 10)
        n = 30;
    else
        n = 31;

    return n;
}

tidsForskel(d1,d2);


har ikke lige gidet at tjekke den... :)
Avatar billede donslund Nybegynder
01. januar 2005 - 18:04 #7
Det ser rimeligt ud.

Men den tæller ikke tiden. Jeg har smidt dete hele ind i en onClipEvent:

onClipEvent (enterFrame) {
    var d1 = new Date(1977, 6, 28, 15, 0, 0);
    var d2 = new Date();

function tidsForskel(d1, d2){
    var dato1 = new Date(Math.min(d1,d2));
    var dato2 = new Date(Math.max(d1,d2));
    var years = dato2.getFullYear()-dato1.getFullYear();
    var months = dato2.getMonth()-dato1.getMonth();
    var days = dato2.getDate()-dato1.getDate();
    var hours = dato2.getHours()-dato1.getHours();
    var minutes = dato2.getMinutes()-dato1.getMinutes();
    var seconds = dato2.getSeconds()-dato2.getSeconds();
   
    if(seconds < 0){
        minutes--;
        seconds = 60+seconds;
    }
    if(minutes < 0){
        hours--;
        minutes = 60+minutes;
    }
    if(hours < 0){
        days--;
        hours = 24+hours;
    }
    if(days < 0){
        months--;
    }
    if(months < 0){
        years--;
        months = 12+months;
    }
    if(days < 0)
        days = getNumberOfDaysInMonth(years, months)+days;
       
    alder = years+" - "+months+" - "+days+" - "+hours+" - "+minutes+" - "+seconds;
}

function getNumberOfDaysInMonth(year, month){
    var n;
    if(month == 1){
        if(((year % 4 == 0) && (year % 100 != 100)) || (year % 400 == 0))
            n = 29;
        else
            n = 28;
    }else if (month == 3 || month == 5 || month == 8 || month == 10)
        n = 30;
    else
        n = 31;

    return n;
}

tidsForskel(d1,d2);

}

Og så lavet en dynamisk tekstboks der indeholder variablen _root.actions.alder
Avatar billede pyroman Nybegynder
01. januar 2005 - 18:20 #8
Der var lige en lille fejl med sekunderne:
var seconds = dato2.getSeconds()-dato2.getSeconds();
det er jo altid 0, så den går ikke ;)

Brug dette script i stedet - og indsæt det i første frame i dit movieclip med dit tekstfelt, som du giver instance-navnet og ikke variablen "alder" - det er nemlig noget gammelt flash 5 snask!!


var final = new Date(2005, 3, 8);

function tidsForskel(d1, d2){

    var dato1 = new Date(Math.min(d1,d2));
    var dato2 = new Date(Math.max(d1,d2));
    var years = dato2.getFullYear()-dato1.getFullYear();
    var months = dato2.getMonth()-dato1.getMonth();
    var days = dato2.getDate()-dato1.getDate();
    var hours = dato2.getHours()-dato1.getHours();
    var minutes = dato2.getMinutes()-dato1.getMinutes();
    var seconds = dato2.getSeconds()-dato1.getSeconds();
 
    if(seconds < 0){
        minutes--;
        seconds = 60+seconds;
    }
    if(minutes < 0){
        hours--;
        minutes = 60+minutes;
    }
    if(hours < 0){
        days--;
        hours = 24+hours;
    }
    if(days < 0){
        months--;
    }
    if(months < 0){
        years--;
        months = 12+months;
    }
    if(days < 0)
        days = getNumberOfDaysInMonth(years, months)+days;
   
    var tid = years+" - "+months+" - "+days+" - "+hours+" - "+minutes+" - "+seconds;
    alder.text = years+" - "+months+" - "+days+" - "+hours+" - "+minutes+" - "+seconds;
}

function getNumberOfDaysInMonth(year, month){
    var n;
    if(month == 1){
        if(((year % 4 == 0) && (year % 100 != 100)) || (year % 400 == 0))
            n = 29;
        else
            n = 28;
    }else if (month == 3 || month == 5 || month == 8 || month == 10)
        n = 30;
    else
        n = 31;

    return n;
}

this.onEnterFrame = function(){
    var now = new Date();
    tidsForskel(now, final);
}
Avatar billede barklund Nybegynder
02. januar 2005 - 02:55 #9
Straks bedre, pyroman ;)

Næsten identisk med, hvad jeg sad og fumlede mig frem til - så jeg har lige stjålet det og proppet det over i en lille artikel:

http://actionscript.dk/artikler/?t=Dato_forskel

(her vil jeg fremover søge at samle alle de små guldkorn, som måtte dukke op - hvem som helst kan sådan set oprette artikler her, da jeg har lavet et fint lille online system til det ;))

--
Morten Barklund
Avatar billede pyroman Nybegynder
02. januar 2005 - 12:43 #10
Det er i orden du!

Faktisk smart måde at finde antal dage i måneden på! havde jeg ikke lige tænkt på... Men det ser nu lidt flottere ud med lidt matematik ;)

donslund => Har du hittet ud af det?
Avatar billede donslund Nybegynder
02. januar 2005 - 15:42 #11
Jeps.
Tak for jeres tid.

Jeg kan ikke helt greje hvem der har fortjent point, men mon ikke Barklund har fortjent flest.

Smid lidt svar.
Avatar billede barklund Nybegynder
02. januar 2005 - 16:13 #12
Na, smid bare de fleste efter pyromanen :)
Avatar billede barklund Nybegynder
02. januar 2005 - 16:13 #13
Hov
Avatar billede pyroman Nybegynder
02. januar 2005 - 19:42 #14
Tjae - det var jo mig der grejede den... ;)

og så skal jeg nok se at oprette mig som bruger inde på din side barklund - fin artikel du har skrevet om binær/hex/oct tal!!
Avatar billede pyroman Nybegynder
02. januar 2005 - 19:43 #15
hov - og et svar skal du ikke snydes for :)
Avatar billede barklund Nybegynder
02. januar 2005 - 19:46 #16
Hehe, ja det var så et andet spørgsmål herinde, der blev besvaret den vej rundt :)
Avatar billede donslund Nybegynder
02. januar 2005 - 19:53 #17
Og hvis man må tage lidt af æren, så var det vist et spørgsmål jeg stillede der afledte artiklen.

http://www.eksperten.dk/spm/573798

Eller er det bare fordi jeg er dum ;-)

Tak for jeres altid utrættelige hjælp.
Avatar billede barklund Nybegynder
03. januar 2005 - 00:14 #18
Så lidt ;)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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

IT-JOB

Politiets Efterretningstjeneste

AI/ML udvikler i PET

Politiets Efterretningstjeneste

Fullstack softwareudvikler i PET

Capgemini Danmark A/S

AI/Data Engineer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Teknologirådgiver inden for AI-området til Teknologiafdelingen