Avatar billede ansa Nybegynder
30. april 2003 - 21:38 Der er 20 kommentarer og
1 løsning

Ikke nedtælling - men "optælling" på dato - hvordan

jeg vil gerne på min søns hjemmeside her en dato-tæller der tæller op fra hans fødsel!

Altså: v År x måneder y uger og z dage siden han blev født. Er der nogen der kan hjælpe med en kode (det kender jeg ikke selv noget til!!)
Avatar billede jones279 Nybegynder
30. april 2003 - 21:40 #1
****OFF TOPIC****

Squ smart - så glemmer du ikke hvornår han har føs'dag ;)
Du burde også få en der tæller ned til næste gang han har føs'dag hehe :D

****END OFF TOPIC****
Avatar billede =maddog= Nybegynder
30. april 2003 - 21:54 #2
Avatar billede ahv Nybegynder
30. april 2003 - 22:02 #3
<html>
<head>
<style>
span {
color: red;
}
</style>
<script>
datoop = new Date(2003, 3, 30, 22, 00, 0); // Måneden skal være en mindre

function tael() {
nu = new Date();

//Tæl op

nt = nu.getTime() - datoop.getTime();
d = Math.ceil(nt / (1000 * 60 * 60 * 24));
t = Math.ceil(nt / (1000 * 60 * 60));
m = Math.ceil(nt / (1000 * 60));
s = Math.ceil(nt / 1000);
sd = Math.floor(nt / (1000 * 60 * 60 * 24));
st = Math.floor((nt % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
sm = Math.floor(((nt % (1000 * 60 * 60 * 24)) % (1000 * 60 * 60)) / (1000 * 60));
ss = Math.floor((((nt % (1000 * 60 * 60 * 24)) % (1000 * 60 * 60)) % (1000 * 60)) / 1000);
str = sd + ((sd == 1) ? " dag, " : " dage, ") + st + ((st == 1) ? " time, " : " timer, ") + sm + ((sm == 1) ? " minut, og " : " minutter, og ") + ss + ((ss == 1) ? " sekund." : " sekunder.");
getObj("samletop").innerHTML = str;
setTimeout("tael();", 1000);
}

function getObj(id) {
if (document.getElementById)
return document.getElementById(id);
if (document.all)
return document.all[id];
}
</script>
</head>
<body onLoad="tael();">
<h3>Tid fra d. 27/22-2002</h3>
<span id="samletop"></span>
</body>
</html>
Avatar billede ahv Nybegynder
30. april 2003 - 22:02 #4
hov:

<body onLoad="tael();">
<h3>Tid fra d. 30/04-2003 22:00</h3>
<span id="samletop"></span>
</body>
</html>
Avatar billede ansa Nybegynder
30. april 2003 - 22:14 #5
ahv> det ser kanon ud - kan der komme år på???

Se ellers hvad jeg fandt her - men det er på tysk:

<!-- www.jjam.de - Countup mit JavaScript - Version 14.02.2003 -->

<html>

    <head>
        <title>Ein Countup mit JavaScript</title>
        <meta name="robots" content="noindex,nofollow">
        <style type="text/css">body{background-color:#ffffff};input {background-color:#ffffff;border-width:1};p{font-size:80%}</style>

<script language="JavaScript">
    var jahr=2001, monat=1, tag=1, stunde=0, minute=0, sekunde=0; // Start-Datum in MEZ

    function countup() {
        var startDatum=new Date(jahr,monat-1,tag,stunde,minute,sekunde);
        zielDatum=new Date(); // Aktuelles Datum

        // Countup erst berechnen und anzeigen, wenn Start-Datum überschritten wird
        if(startDatum<zielDatum)  {

            var jahre=0, monate=0, tage=0, stunden=0, minuten=0, sekunden=0;

            /* Allgemeines Vorgehen:
            * Zunächst werden die vollen Jahre gezählt
            * und anschließend der Start- und Ziel-Monat auf den jeweiligen 1. gesetzt.
            * Nun werden erst die vollen Monate vom 1. zum 1. des Start- bzw. Ziel-Monats berechnet
            * und danach die tatsächlichen Monatstage wieder mit einbezogen.
            * Dieses Vorgehen vermeidet Probleme mit den verschiedenen Monatslängen.
            * Die restliche Differenz zwischen Start- und Ziel-Zeit wird mit Tagen aufgefüllt und
            * was dann noch übrig bleibt, in Stunden, Minuten und Sekunden ausgedrückt.*/

            // Jahre
            if(startDatum<zielDatum) {
                while(startDatum<zielDatum) {
                    if(startDatum.setFullYear(startDatum.getFullYear()+1)<=zielDatum) jahre++;
                }
                startDatum.setFullYear(startDatum.getFullYear()-1);
            }

            // Restliche Tage zum Monatsende ermitteln
            var restTage=0;
            var m=startDatum.getMonth();
            if(m==1-1|| m==3-1||m==5-1||m==7-1||m==8-1||m==10-1||m==12-1) restTage=31-startDatum.getDate();
            else if(m==4-1|| m==6-1||m==9-1||m==11-1) restTage=30-startDatum.getDate();
            else if(m==2-1) {
                if(startDatum.getFullYear()%4==0 && (startDatum.getFullYear()%100!=0 || startDatum.getFullYear()%400==0)) restTage=29-startDatum.getDate(); // Schaltjahr
                else restTage=28-startDatum.getDate();
            }

            // Start- und Ziel-Tag merken und auf 1 setzen
            var startTag=startDatum.getDate();
            var zielTag=zielDatum.getDate();
            startDatum.setDate(1);
            zielDatum.setDate(1);

            // Monate
            if(startDatum<zielDatum) {
                while(startDatum<zielDatum) {
                    if(startDatum.setMonth(startDatum.getMonth()+1)<=zielDatum) monate++;
                }
                startDatum.setMonth(startDatum.getMonth()-1);
            }

            // Tatsächlichen Start- und Ziel-Tag berücksichtigen
            if(startDatum.getMonth()==zielDatum.getMonth()) {
                if(startTag<=zielTag) startDatum.setDate(startTag);
                else {
                    monate--;
                    tage=restTage+1;
                }
            }
            else {
                startDatum.setMonth(startDatum.getMonth()+1);
                if(startTag>=zielTag) tage=restTage+1;
                else {
                    monate++;
                    startDatum.setDate(startTag);
                }
            }
            zielDatum.setDate(zielTag);

            // Tage
            restTage=Math.floor((zielDatum-startDatum)/(24*60*60*1000));
            startDatum.setTime(startDatum.getTime()+restTage*24*60*60*1000);
            tage+=restTage;

            // Stunden
            stunden=Math.floor((zielDatum-startDatum)/(60*60*1000));
            startDatum.setTime(startDatum.getTime()+stunden*60*60*1000);

            // Minuten
            minuten=Math.floor((zielDatum-startDatum)/(60*1000));
            startDatum.setTime(startDatum.getTime()+minuten*60*1000);

            // Sekunden
            sekunden=Math.floor((zielDatum-startDatum)/1000);

            // Anzeige formatieren
            (jahre!=1)?jahre=jahre+" Jahre,  ":jahre=jahre+" Jahr,  ";
            (monate!=1)?monate=monate+" Monate,  ":monate=monate+" Monat,  ";
            (tage!=1)?tage=tage+" Tage,  ":tage=tage+" Tag,  ";
            (stunden!=1)?stunden=stunden+" Stunden,  ":stunden=stunden+" Stunde,  ";
            (minuten!=1)?minuten=minuten+" Minuten  und  ":minuten=minuten+" Minute  und  ";
            if(sekunden<10) sekunden="0"+sekunden;
            (sekunden!=1)?sekunden=sekunden+" Sekunden":sekunden=sekunden+" Sekunde";

            document.countupform.countupinput.value=jahre+monate+tage+stunden+minuten+sekunden;

        }
        // Anderenfalls alles auf Null setzen
        else document.countupform.countupinput.value="0 Jahre,  0 Monate,  0 Tage,  0 Stunden,  0 Minuten  und  00 Sekunden";

        setTimeout('countup()',200);
    }
</script>

    </head>

    <body scroll="auto" onload="countup()">
        <br>
        <p>Wie die Zeit vergeht. Schon</p>
            <form name="countupform">
                <p>
                    <input size="75" name="countupinput" style="background-color:#ffffff;border-width:0" onfocus="if(this.blur)this.blur()">
                </p>
            </form>
        <p>ist das neue Jahrtausend alt.</p>
    </body>
<html>
Avatar billede roenving Novice
30. april 2003 - 22:16 #6
Hej

Du gør det en hel masse sværere ved også at tage antal år og antal måneder med, dage og uger kan man jo bare beregne fra forskellen fra dengang til nu, år og måneder skal lige tage højde for skæve måneder osv.

Her er kun programmeringen, ahv's HTML ser ordentlig ud.

<script language="javascript">
var birth = new Date(åå,mm,dd) //Her skrives din søns fødselsdato, eks. 89,00,13 (13-1-1989) bemærk at der skal trækkes 1 fra måneden

var idag = new Date()

var v = idag.getFullYear() - birth.getFullYear()
var x = v * 12 + idag.getMonth() - birth.getMonth()
if (idag.getMonth() < birth.getMonth()) {
  v = v - 1
}

else {
  if (idag.getMonth() = birth.getMonth()) {
    if (idag.getDate() < birth.getDate()) {
      v = v - 1
      x = x - 1
    }
  }
}

var z = (idag.getTime() - birth.getTime())/(1000*60*60*24)
var y = z / 7

</script>
Avatar billede ansa Nybegynder
30. april 2003 - 22:19 #7
hvis jeg nu giver dig datoen 1. april 2002 kl. 04.55 - hvordan ville den så se ud??
Avatar billede roenving Novice
30. april 2003 - 22:20 #8
PS.
Har lige holdt lang tids pause fra javascript, så logikken er jeg stadig skarp på, men ...

f.eks. havde jeg ikke lige hjernen med på :

if (idag.getMonth() < birth.getMonth()) {
  v = v - 1
}

Kan skrives:

if (idag.getMonth() < birth.getMonth()) v--

hth
jes
Avatar billede ansa Nybegynder
30. april 2003 - 22:35 #9
Jeg er som nævnt ikke skrap i kodning - så er der nogen der har den "totale løsning" så er jeg glad!!!! Beklager !!!!
Avatar billede roenving Novice
30. april 2003 - 23:57 #10
Lidt klippe og klistring -- min kode opdateret sat ind i ahv's HTML


<html>
<head>
<style>
span {
color: red;
}
</style>
<script>
var birth = new Date(02,03,01,04,55,00) //Her skrives din søns fødselsdato, eks. 02,03,01,04,55,00 (01-4-2002 04:55) bemærk at der skal trækkes 1 fra måneden

var idag = new Date();

var v = idag.getFullYear() - birth.getFullYear(); //Antal år
var harHaft = 0;

if (idag.getMonth() < birth.getMonth()) { //Men har han haft fødselsdag i år?
  v--;
  harHaft = -1;
}

else {
  if (idag.getMonth() = birth.getMonth()) {
    if (idag.getDate() < birth.getDate()) {
      v--;
      harHaft = -1;
    }
  }
}

var lastBirthDate = new Date(idag.getFullYear() + harHaft, birth.getMonth(), birth.getDate(), birth.getHours(), birth.getMinutes(), birth.getSeconds()); //Sidste fødselsdsdag

var x = (idag.getMonth() + 12 - lastBirthDate.getMonth()) % 12; //Måneder siden sidste fødselsdag
var ss = (idag.getTime() - lastBirthDate.getTime())/(1000); //Sekunder siden sidste fødselsdag
var sm = ss / 60; //Minutter siden sidste fødselsdag
var st = sm / 60; //Timer siden sidste fødselsdag
var z = st / 24; //Dage siden sidste fødselsdag
var y = (z / 7) % 1; //Uger siden sidste fødselsdag
z = z % 7; //Dage siden sidste ugedag, som fødselsdag var
st = st % 24; //Timer siden sidste timetal, som fødselsdag var
sm = sm % 60; //Minutter siden sidste minuttal, som fødselsdag var
ss = ss % 60; //Sekunder siden sidste sekundtal, som fødselsdag var


str = v + " år, " + x + ((x == 1) ? " måned, " : " måneder, ") + y + (y == 1) ? " uge, " : " uger, ") +z + ((z == 1) ? " dag, " : " dage, ") + st + ((st == 1) ? " time, " : " timer, ") + sm + ((sm == 1) ? " minut, og " : " minutter, og ") + ss + ((ss == 1) ? " sekund." : " sekunder.");
getObj("samletop").innerHTML = str;
setTimeout("tael();", 1000);

function getObj(id) {
if (document.getElementById)
return document.getElementById(id);
if (document.all)
return document.all[id];
}
</script>
</head>
<body onLoad="tael();">
<h3>Tid fra d. 27/22-2002</h3>
<span id="samletop"></span>
</body>
</html>

PS! -  lokalserveren er ikke checket, så testningen er mangelfuld

hth
jes
Avatar billede roenving Novice
01. maj 2003 - 00:02 #11
Hov

glemte lige

</style>
<script>
var birth = new Date(02,03,01,04,55,00) //Her skrives din søns fødselsdato, eks. 02,03,01,04,55,00 (01-4-2002 04:55) bemærk at der skal trækkes 1 fra måneden

function tael() {

var idag = new Date();


Function-erklæringen havde jeg ikke fået med

hth
jes
Avatar billede ansa Nybegynder
03. maj 2003 - 14:21 #12
Hmmmm jeg kan ikke få den til at virke - er det bare mig eller hva´?? - ...... hjælp.....
Avatar billede roenving Novice
03. maj 2003 - 14:48 #13
Skulle nok lige have testet på det simple, men her er den i hvert fald:

<html>
<head>
<style>
span {
color: red;
}
</style>
<script>
var birth = new Date(2002,03,01,04,55,00) //Her skrives din søns fødselsdato, eks. 02,03,01,04,55,00 (01-4-2002 04:55) bemærk at der skal trækkes 1 fra måneden

function tael() {

var idag = new Date();

var v = idag.getFullYear() - birth.getFullYear(); //Antal år
var harHaft = 0;

if (idag.getMonth() < birth.getMonth()) { //Men har han haft fødselsdag i år?
  v--;
  harHaft = -1;
}

else {
  if (idag.getMonth() == birth.getMonth()) {
    if (idag.getDate() < birth.getDate()) {
      v--;
      harHaft = -1;
    }
  }
}

var lastBirthDate = new Date(idag.getFullYear() + harHaft, birth.getMonth(), birth.getDate(), birth.getHours(), birth.getMinutes(), birth.getSeconds()); //Sidste fødselsdsdag

var x = (idag.getMonth() + 12 - lastBirthDate.getMonth()) % 12; //Måneder siden sidste fødselsdag
var ss = (idag.getTime() - lastBirthDate.getTime())/(1000); //Sekunder siden sidste fødselsdag
var sm = ss / 60; //Minutter siden sidste fødselsdag
var st = sm / 60; //Timer siden sidste fødselsdag
var z = st / 24; //Dage siden sidste fødselsdag
var y = Math.floor((z / 7) % 1); //Uger siden sidste fødselsdag
z = Math.floor(z % 7); //Dage siden sidste ugedag, som fødselsdag var
st = Math.floor(st % 24); //Timer siden sidste timetal, som fødselsdag var
sm = Math.floor(sm % 60); //Minutter siden sidste minuttal, som fødselsdag var
ss = Math.floor(ss % 60); //Sekunder siden sidste sekundtal, som fødselsdag var


str = v + " år, " + Math.floor(x) + ((x == 1) ? " måned, " : " måneder, ") + y + ((y == 1) ? " uge, " : " uger, ") + z + ((z == 1) ? " dag, " : " dage, ") + st + ((st == 1) ? " time, " : " timer, ") + sm + ((sm == 1) ? " minut, og " : " minutter, og ") + ss + ((ss == 1) ? " sekund." : " sekunder.");
getObj("samletop").innerHTML = str;
setTimeout("tael();", 1000);
}

function getObj(id) {
if (document.getElementById)
return document.getElementById(id);
if (document.all)
return document.all[id];
}
</script>
</head>
<body onLoad="tael();">
<h3>Tid fra d. 01/4-2002</h3>
<span id="samletop"></span>
</body>
</html>


mvh
jes
Avatar billede roenving Novice
03. maj 2003 - 14:52 #14
PS.

Jeg kan se den tæller antal dage ud fra ugedag -- er det det den skal?

Altså skal man få den rigtige dag ved at lægge år + måneder + dage + timer osv., eller skal den, som her, tælle antal dage i ugen?
Avatar billede ansa Nybegynder
03. maj 2003 - 15:07 #15
Nu liger der noget - men jo helst det med år + måneder + dage + timer (kan vi ikke skippe sekunder??)
Avatar billede roenving Novice
03. maj 2003 - 15:12 #16
-- og uger?

Det er nemmere

-- forøvrigt får jeg lige rodet grundigt i det, så om et øjeblik har jeg også checket om koden kan klare mærkværdighederne.

mvh
jes
Avatar billede ansa Nybegynder
03. maj 2003 - 15:20 #17
jo og uger tak!!
Avatar billede roenving Novice
03. maj 2003 - 15:42 #18
<html>
<head>
<style>
span {
color: red;
}
</style>
<script>
var birth = new Date(2002,03,01,04,55,00) //Her skrives din søns fødselsdato, eks. 2002,03,01,04,55,00 (01-4-2002 04:55) bemærk at der skal trækkes 1 fra måneden

function tael() {

var idag = new Date();

var v = idag.getFullYear() - birth.getFullYear(); //Antal år
var harHaft = 0;

if (idag.getMonth() < birth.getMonth()) { //Men har han haft fødselsdag i år?
  v--;
  harHaft = -1;
}

else {
  if (idag.getMonth() == birth.getMonth()) {
    if (idag.getDate() < birth.getDate()) {
      v--;
      harHaft = -1;
    }
  }
}

var lastBirthDate = new Date(idag.getFullYear() + harHaft, birth.getMonth(), birth.getDate(), birth.getHours(), birth.getMinutes(), birth.getSeconds()); //Sidste fødselsdsdag


if (idag.getDate()>=birth.getDate()) {
  var sx = idag.getMonth()
  var x = (idag.getMonth() + 12 - lastBirthDate.getMonth()) % 12; //Måneder siden sidste fødselsdag
} else {
  var sx = idag.getMonth() - 1
  var x = (idag.getMonth() + 11 - lastBirthDate.getMonth()) % 12; //Måneder siden sidste fødselsdag

}

var glAar = sx<0?-1:0;

var lastMonthDate = new Date(idag.getFullYear() + glAar, (birth.getMonth() + x) % 12, birth.getDate(), birth.getHours(), birth.getMinutes(), birth.getSeconds()); //Sidste fødselsdsdag

var sm = (idag.getTime() - lastMonthDate.getTime())/(60000) ; //Minutter siden sidste månedsfødselsdag
var st = sm / 60; //Timer siden sidste månedsfødselsdag
var z = st / 24; //Dage siden sidste månedsfødselsdag
//var y = Math.floor(z / 7); //Uger siden sidste månedsfødselsdag
z = Math.floor(z); //Dage siden sidste månedsfødselsdag
st = Math.floor(st % 24); //Timer siden sidste timetal, som fødselsdag var
sm = Math.floor(sm % 60); //Minutter siden sidste minuttal, som fødselsdag var
//ss = Math.floor(ss % 60); //Sekunder siden sidste sekundtal, som fødselsdag var


str = v + " år, " + x + ((x == 1) ? " måned, " : " måneder, ") + z + ((z == 1) ? " dag, " : " dage, ") + st + ((st == 1) ? " time, " : " timer, ") + sm + ((sm == 1) ? " minut" : " minutter");
getObj("samletop").innerHTML = str;
setTimeout("tael();", 1000);
}

function getObj(id) {
if (document.getElementById)
return document.getElementById(id);
if (document.all)
return document.all[id];
}
</script>
</head>
<body onLoad="tael();">
<h3>Tid fra d. 01/04-2002</h3>
<span id="samletop"></span>
</body>
</html>



Stødte selvfølgelig lige ind i de årnsvage problemer (havde skrevet med stort osv.)

Nu skulle den være uden de fejl med mærkelige månedsskift m.m.m.

hth
jes :-)
Avatar billede ansa Nybegynder
03. maj 2003 - 17:23 #19
Kanon - pointene er dine og jeg takker (også på sønnikes vegne!!)
Avatar billede roenving Novice
03. maj 2003 - 17:28 #20
Takker for pointene ;~}
Avatar billede donslund Nybegynder
02. januar 2005 - 19:26 #21
Et lidt gammelt spørgsmål men jeg forsøger at prikke hul alligevel. Er det et stort arbejde at slå sekunder til igen?
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