/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
JavaScript nedtælling
Fra : Martin Ploug


Dato : 09-12-10 16:57

Hej

Måske et dumt spørgsmål, men hvordan
angives december som Date.UTC ?

Ifølge
http://www.w3schools.com/jsref/jsref_utc.asp
skal tallet være imellem 0 og 11.
Er december = 0 ? Jeg synes ikke, at det virker.
Og skal man angive tidszonen?

Jeg prøver at samle et helt simpelt JavaScript
der tæller ned til en bestemt dato - ikke noget
med visning af minutter, sekunder osv.

Jeg vil gerne have det til at skrive nedenstående
beskeder alt efter hvor mange dage der er tilbage.

Hvis datoen er dagen er i morgen skal scriptet
skrive "... i morgen". Hvis datoen er i dag, skal
det skrive ".. i dag"

Og ellers skal det bare skrive, hvor mange dage
der er tilbage og helst ikke noget med at begynde
at skrive minus-dage, hvis den angivne dato er passeret.

Jeg har fundet flere forskellige scripts, som jeg fifler
lidt med, men mangler lige lidt hjælp.

Jeg synes umiddelbart jeg kan bruge noget fra
denne side http://www.bellaonline.com/articles/art40292.asp

men jer åben for andre bud.

Venlig hilsen
Martin

 
 
Martin Ploug (09-12-2010)
Kommentar
Fra : Martin Ploug


Dato : 09-12-10 17:00

Den 09-12-2010 16:57, Martin Ploug skrev:
> Hej
>
> Måske et dumt spørgsmål, men hvordan
> angives december som Date.UTC ?
>
> Ifølge
> http://www.w3schools.com/jsref/jsref_utc.asp
> skal tallet være imellem 0 og 11.
> Er december = 0 ? Jeg synes ikke, at det virker.
> Og skal man angive tidszonen?
>
> Jeg prøver at samle et helt simpelt JavaScript
> der tæller ned til en bestemt dato - ikke noget
> med visning af minutter, sekunder osv.
>
> Jeg vil gerne have det til at skrive nedenstående
> beskeder alt efter hvor mange dage der er tilbage.
>
> Hvis datoen er dagen er i morgen skal scriptet
> skrive "... i morgen". Hvis datoen er i dag, skal
> det skrive ".. i dag"
>
> Og ellers skal det bare skrive, hvor mange dage
> der er tilbage og helst ikke noget med at begynde
> at skrive minus-dage, hvis den angivne dato er passeret.
>
> Jeg har fundet flere forskellige scripts, som jeg fifler
> lidt med, men mangler lige lidt hjælp.
>
> Jeg synes umiddelbart jeg kan bruge noget fra
> denne side http://www.bellaonline.com/articles/art40292.asp
>
> men jer åben for andre bud.
>
> Venlig hilsen
> Martin

Ups, der står på den side jeg henviser til, at januar er 0.

Birger Sørensen (09-12-2010)
Kommentar
Fra : Birger Sørensen


Dato : 09-12-10 17:40

Martin Ploug formulerede spørgsmålet:
8X
>
> Ups, der står på den side jeg henviser til, at januar er 0.

Det er korrekt at månederne er indxet 0-11 i JS.
Og bemærk så at dagene er ikke, det er 1-31.
Jeg skal ikke gøre mig klog på hvorfor - og det er nok også ligemeget,
det ændrer jo ikke på hvorfor det er sådan.

DU kan måske finde noget inspiration her:
https://developer.mozilla.org/en/JavaScript/Reference
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date
Den sidste formentlig bedst til dit aktuelle formål.
Der er eksempler på hvordan man beregner forskellen på to datoer,
og det du skal er så bare ud fra forskellen at skrive ingenting hvis
den er negtiv, "i dag" hvis den er 0, "i morgen" hvis den er 1, og
eller antallet af dage.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Martin Ploug (09-12-2010)
Kommentar
Fra : Martin Ploug


Dato : 09-12-10 18:05

Den 09-12-2010 17:40, Birger Sørensen skrev:
> Martin Ploug formulerede spørgsmålet:
> 8X
>>
>> Ups, der står på den side jeg henviser til, at januar er 0.
>
> Det er korrekt at månederne er indxet 0-11 i JS.
> Og bemærk så at dagene er ikke, det er 1-31.
> Jeg skal ikke gøre mig klog på hvorfor - og det er nok også ligemeget,
> det ændrer jo ikke på hvorfor det er sådan.
>
> DU kan måske finde noget inspiration her:
> https://developer.mozilla.org/en/JavaScript/Reference
> https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date
> Den sidste formentlig bedst til dit aktuelle formål.
> Der er eksempler på hvordan man beregner forskellen på to datoer,
> og det du skal er så bare ud fra forskellen at skrive ingenting hvis den
> er negtiv, "i dag" hvis den er 0, "i morgen" hvis den er 1, og eller
> antallet af dage.
>
> Birger
>

Hej Birger

Mange tak for dine kommentarer.
Jeg har tilpasset scriptet fra
http://www.bellaonline.com/articles/art40292.asp

og det ser umiddelbart ud til at fungere.
Jeg har lagt mit script ud her:
http://www.detour.dk/js/demo.phps (ved godt, at det ikke er php).

Jeg har lige et par sidste opklarende spørgsmål.
Vedr. Date.UTC - skal tidszonen med, og har jeg angivet den korrekt?
Det er til en dansk hjemmeside.

Hvorfor skal var now=new Date(); være med - er det for overhovedet at
kunne arbejde med datoer?

Venlig hilsen
Martin


Birger Sørensen (09-12-2010)
Kommentar
Fra : Birger Sørensen


Dato : 09-12-10 19:13

Martin Ploug kom med følgende:
> Den 09-12-2010 17:40, Birger Sørensen skrev:
>> Martin Ploug formulerede spørgsmålet:
>> 8X
>>>
>>> Ups, der står på den side jeg henviser til, at januar er 0.
>>
>> Det er korrekt at månederne er indxet 0-11 i JS.
>> Og bemærk så at dagene er ikke, det er 1-31.
>> Jeg skal ikke gøre mig klog på hvorfor - og det er nok også ligemeget,
>> det ændrer jo ikke på hvorfor det er sådan.
>>
>> DU kan måske finde noget inspiration her:
>> https://developer.mozilla.org/en/JavaScript/Reference
>> https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date
>> Den sidste formentlig bedst til dit aktuelle formål.
>> Der er eksempler på hvordan man beregner forskellen på to datoer,
>> og det du skal er så bare ud fra forskellen at skrive ingenting hvis den
>> er negtiv, "i dag" hvis den er 0, "i morgen" hvis den er 1, og eller
>> antallet af dage.
>>
>> Birger
>>
>
> Hej Birger
>
> Mange tak for dine kommentarer.
> Jeg har tilpasset scriptet fra
> http://www.bellaonline.com/articles/art40292.asp
>
> og det ser umiddelbart ud til at fungere.
> Jeg har lagt mit script ud her:
> http://www.detour.dk/js/demo.phps (ved godt, at det ikke er php).
>
> Jeg har lige et par sidste opklarende spørgsmål.
> Vedr. Date.UTC - skal tidszonen med, og har jeg angivet den korrekt?
> Det er til en dansk hjemmeside.
>
> Hvorfor skal var now=new Date(); være med - er det for overhovedet at
> kunne arbejde med datoer?
>
> Venlig hilsen
> Martin

Først Date.UTC()
UTC er en funktion i Date objectet. Den har den fordel, at den i stedet
for at give fejl ved ugyldige værdier, korrigerer input (hvis du
skriver 15 for måned, lææges een til året, og du får 3. måned).
Til gengæld opfatter den så den angivne tid som UTC (GMT), og ikke som
lokal tid.
(Der skal ikke angives tidszone. Scriptet sætter timen til 1, svarende
til at DK er +1 time i forhold til GMT - London, for at få lokal tid)
Når du nu kender datoen - altså angiver den med tal -, kan du lige så
godt bare bruge Date(), uden at korrigere for tidszonen - værdierne er
jo gyldige. Det skal give samme resultat.

Så spørger du til new Date().
Du har de her linier:

var countdown_time=Date.UTC(2010,11,12,+1);
var now=new Date();
var now_millisecs=now.valueOf();

countdown_time er et tal (millisekunder siden 1/1-1970).
now er et Date object, og det indeholder dato og tidspunt for
oprettelsen af objectet. Du kan hente år, måned, dag - og alle de
andre, der angivet på linket til date objectet - ud af det. f.eks. vil
now.getDate give den dag i måneden, objektet blev oprettet.

Du bruger objectet, til at omregne oprettelsestidspunktet til
millisekunder med linien
var now_millisecs=now.valueOf();
I virkeligheden er det ganske overflødigt, for du bruger ikke objektet
til andet.
var now_millisecs = Date.now();
gør det samme (og det står også på siden i date linket )

Du kan fjerne linien
var millisecs_per_day=86400000
først i koden. Den oprettede variabel bruges ikke - der hvor du kunne
have gjort det, bruge du tallet, hvilket også er det rigtige, når det
kun anvendes een gang.

Og endelig kan man sige, at der bliver brugt lidt rigeligt variable til
at holde tal der skal bruges een gang, så..
var day_cnt = Math.ceil((
Date.UTC(2010,11,12,+1)-Date.now())/86400000);
gør det samme som de første 5 linier i dit script, der ikke er tomme
eller kommentarer. Og selvom det måske er komprimeret, er det stadig
både læseligt og forståeligt.


Syntes lige jeg vil give dig en lidt enklere udgave af det her også:
if (day_cnt > 1 )
{
document.write("hjemmesiden lukker om " + day_cnt + " dage.")
}
// 1 dag til den angivne dag
else if (day_cnt == 1 )
{
document.write("hjemmesiden lukker i morgen.")
}
// dags dato er lig med den angivne dag
else if (day_cnt == 0 )
{
document.write("hjemmesiden lukker i dag.")
}
else if (day_cnt < 1 ) // og den her bør sammenligne på 0 og ikke 1!
{
document.write("hjemmesiden er lukket.")
}


Det kan gøres sådan:
var txt = 'hjemmesiden lukker ';
if ( day_cnt < 0 ) {
txt = 'hjemmesiden er lukket.';
}
else {
switch ( day_cnt ) {
case 0 : txt += 'i dag'; break;
case 1 : txt += 'i morgen'; break;
default : txt += 'om '+day_cnt+' dage.';
}
}
document.write( txt);
Måske smag og behag - jeg syntes det er nemmere at læse.

Og hvis der så skal kommenteres yderligere, så grisser du med
udeladelse af ; til afslutning af expressions. Man *kan* udelade dem,
når de falder sammen med linieafslutning (ny linie). Det er til gengæld
en skidt vane at tillægge sig. Semikolonnet er en del af syntaxen i JS.

Og hvis der er spørsmål, spørger du igen.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Birger Sørensen (09-12-2010)
Kommentar
Fra : Birger Sørensen


Dato : 09-12-10 19:32

Birger Sørensen forklarede den 09-12-2010:
8x
> var day_cnt = Math.ceil(( Date.UTC(2010,11,12,+1)-Date.now())/86400000);
8x

Eller blot
var day_cnt = Math.ceil(( Date(2010,11,12)-Date.now())/86400000);

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Martin Ploug (09-12-2010)
Kommentar
Fra : Martin Ploug


Dato : 09-12-10 19:41

Den 09-12-2010 19:32, Birger Sørensen skrev:
> Birger Sørensen forklarede den 09-12-2010:
> 8x
>> var day_cnt = Math.ceil(( Date.UTC(2010,11,12,+1)-Date.now())/86400000);
> 8x
>
> Eller blot
> var day_cnt = Math.ceil(( Date(2010,11,12)-Date.now())/86400000);
>
> Birger
>
Hej Birger

Super! Mange tak for dine kommentarer.
Jeg prøver at få det strammet op, og vender så måske tilbage
i tråden

Venlig hilsen
Martin


Martin Ploug (09-12-2010)
Kommentar
Fra : Martin Ploug


Dato : 09-12-10 20:09

Den 09-12-2010 19:41, Martin Ploug skrev:
> Den 09-12-2010 19:32, Birger Sørensen skrev:
>> Birger Sørensen forklarede den 09-12-2010:
>> 8x
>>> var day_cnt = Math.ceil(( Date.UTC(2010,11,12,+1)-Date.now())/86400000);
>> 8x
>>
>> Eller blot
>> var day_cnt = Math.ceil(( Date(2010,11,12)-Date.now())/86400000);
>>
>> Birger
>>
> Hej Birger
>
> Super! Mange tak for dine kommentarer.
> Jeg prøver at få det strammet op, og vender så måske tilbage
> i tråden
>
> Venlig hilsen
> Martin
>

Nu har jeg prøvet at bruge dit script - rigtig
godt, at det er kogt ned til et minimum, men der er
åbenbart lidt knas med det.

http://www.detour.dk/js/trim-countdown.htm

Det skriver NaN (not a number) i stedet for
antallet. Når jeg validerer det, får jeg at vide,
at der en en fejl omkring if ( day_cnt < 0 ) {
Det er nok bare en lille ting, men jeg kan ikke lige se,
hvad det skulle være.

Martin Ploug (09-12-2010)
Kommentar
Fra : Martin Ploug


Dato : 09-12-10 20:12

Den 09-12-2010 19:41, Martin Ploug skrev:
> Den 09-12-2010 19:32, Birger Sørensen skrev:
>> Birger Sørensen forklarede den 09-12-2010:
>> 8x
>>> var day_cnt = Math.ceil(( Date.UTC(2010,11,12,+1)-Date.now())/86400000);
>> 8x
>>
>> Eller blot
>> var day_cnt = Math.ceil(( Date(2010,11,12)-Date.now())/86400000);
>>
>> Birger
>>
> Hej Birger
>
> Super! Mange tak for dine kommentarer.
> Jeg prøver at få det strammet op, og vender så måske tilbage
> i tråden
>
> Venlig hilsen
> Martin
>
Måske den mangler .UTC

Martin Ploug (09-12-2010)
Kommentar
Fra : Martin Ploug


Dato : 09-12-10 20:28

Den 09-12-2010 20:11, Martin Ploug skrev:
> Den 09-12-2010 19:41, Martin Ploug skrev:
>> Den 09-12-2010 19:32, Birger Sørensen skrev:
>>> Birger Sørensen forklarede den 09-12-2010:
>>> 8x
>>>> var day_cnt = Math.ceil((
>>>> Date.UTC(2010,11,12,+1)-Date.now())/86400000);
>>> 8x
>>>
>>> Eller blot
>>> var day_cnt = Math.ceil(( Date(2010,11,12)-Date.now())/86400000);
>>>
>>> Birger
>>>
>> Hej Birger
>>
>> Super! Mange tak for dine kommentarer.
>> Jeg prøver at få det strammet op, og vender så måske tilbage
>> i tråden
>>
>> Venlig hilsen
>> Martin
>>
> Måske den mangler .UTC

Hmm, det løste det med antallet, men der er åbenbart fortsat en fejl
omkring if ( day_cnt < 0 ) {

Venlig hilsen
Martin

Birger Sørensen (09-12-2010)
Kommentar
Fra : Birger Sørensen


Dato : 09-12-10 20:57

Martin Ploug tastede følgende:
> Den 09-12-2010 20:11, Martin Ploug skrev:
>> Den 09-12-2010 19:41, Martin Ploug skrev:
>>> Den 09-12-2010 19:32, Birger Sørensen skrev:
>>>> Birger Sørensen forklarede den 09-12-2010:
>>>> 8x
>>>>> var day_cnt = Math.ceil((
>>>>> Date.UTC(2010,11,12,+1)-Date.now())/86400000);
>>>> 8x
>>>>
>>>> Eller blot
>>>> var day_cnt = Math.ceil(( Date(2010,11,12)-Date.now())/86400000);
>>>>
>>>> Birger
>>>>
>>> Hej Birger
>>>
>>> Super! Mange tak for dine kommentarer.
>>> Jeg prøver at få det strammet op, og vender så måske tilbage
>>> i tråden
>>>
>>> Venlig hilsen
>>> Martin
>>>
>> Måske den mangler .UTC
>
> Hmm, det løste det med antallet, men der er åbenbart fortsat en fejl
> omkring if ( day_cnt < 0 ) {
>
> Venlig hilsen
> Martin

Det fungerer fint i FF.
Det er Date.now() der er problemet - IE forstår den ikke (har så ikke
testet de andre) Date.now er del af EMCA-262 5. edition. Så der kan nok
gå lidt tid før IE er med...

Så er du nødt til at oprette et Date object og bruge den oprindelige
kode.
var now=new Date();
var now_millisecs=now.valueOf();
eller bare
var now_millisecs= (new Date()).valueOf();
som selvfølgelig også kan indsættes i den endelige - men det begynder
måske så at knibe med læsbarheden....
var day_cnt = Math.ceil(( Date.UTC(2010,11,12)-((new
Date).valueOf())/86400000);

Har ikke testet...

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Martin Ploug (09-12-2010)
Kommentar
Fra : Martin Ploug


Dato : 09-12-10 21:17

Den 09-12-2010 20:57, Birger Sørensen skrev:
> Martin Ploug tastede følgende:
>> Den 09-12-2010 20:11, Martin Ploug skrev:
>>> Den 09-12-2010 19:41, Martin Ploug skrev:
>>>> Den 09-12-2010 19:32, Birger Sørensen skrev:
>>>>> Birger Sørensen forklarede den 09-12-2010:
>>>>> 8x
>>>>>> var day_cnt = Math.ceil((
>>>>>> Date.UTC(2010,11,12,+1)-Date.now())/86400000);
>>>>> 8x
>>>>>
>>>>> Eller blot
>>>>> var day_cnt = Math.ceil(( Date(2010,11,12)-Date.now())/86400000);
>>>>>
>>>>> Birger
>>>>>
>>>> Hej Birger
>>>>
>>>> Super! Mange tak for dine kommentarer.
>>>> Jeg prøver at få det strammet op, og vender så måske tilbage
>>>> i tråden
>>>>
>>>> Venlig hilsen
>>>> Martin
>>>>
>>> Måske den mangler .UTC
>>
>> Hmm, det løste det med antallet, men der er åbenbart fortsat en fejl
>> omkring if ( day_cnt < 0 ) {
>>
>> Venlig hilsen
>> Martin
>
> Det fungerer fint i FF.
> Det er Date.now() der er problemet - IE forstår den ikke (har så ikke
> testet de andre) Date.now er del af EMCA-262 5. edition. Så der kan nok
> gå lidt tid før IE er med...
>
> Så er du nødt til at oprette et Date object og bruge den oprindelige kode.
> var now=new Date();
> var now_millisecs=now.valueOf();
> eller bare
> var now_millisecs= (new Date()).valueOf();
> som selvfølgelig også kan indsættes i den endelige - men det begynder
> måske så at knibe med læsbarheden....
> var day_cnt = Math.ceil(( Date.UTC(2010,11,12)-((new
> Date).valueOf())/86400000);
>
> Har ikke testet...
>
> Birger
>

Hej Birger

Mange tak for din forklaring og dien løsningsforslag.
Jeg har prøvet lidt forskelligt, em uanset hvad får
jeg den samme fejl, når jeg validerer.

http://www.detour.dk/js/trim-countdown.htm

Det er måske fordi syntaksen ikke er helt korrekt,
men jeg har vist lige mistet overblikket alligevel.
Det gør ikke noget, at scriptet fylder et par linjer
ekstra, så længe jeg har nogenlunde overblik over,
hvad der foregår.

Det har jeg ikke lige nu

Birger Sørensen (09-12-2010)
Kommentar
Fra : Birger Sørensen


Dato : 09-12-10 21:36

Efter mange tanker skrev Martin Ploug:
> Den 09-12-2010 20:57, Birger Sørensen skrev:
>> Martin Ploug tastede følgende:
>>> Den 09-12-2010 20:11, Martin Ploug skrev:
>>>> Den 09-12-2010 19:41, Martin Ploug skrev:
>>>>> Den 09-12-2010 19:32, Birger Sørensen skrev:
>>>>>> Birger Sørensen forklarede den 09-12-2010:
>>>>>> 8x
>>>>>>> var day_cnt = Math.ceil((
>>>>>>> Date.UTC(2010,11,12,+1)-Date.now())/86400000);
>>>>>> 8x
>>>>>>
>>>>>> Eller blot
>>>>>> var day_cnt = Math.ceil(( Date(2010,11,12)-Date.now())/86400000);
>>>>>>
>>>>>> Birger
>>>>>>
>>>>> Hej Birger
>>>>>
>>>>> Super! Mange tak for dine kommentarer.
>>>>> Jeg prøver at få det strammet op, og vender så måske tilbage
>>>>> i tråden
>>>>>
>>>>> Venlig hilsen
>>>>> Martin
>>>>>
>>>> Måske den mangler .UTC
>>>
>>> Hmm, det løste det med antallet, men der er åbenbart fortsat en fejl
>>> omkring if ( day_cnt < 0 ) {
>>>
>>> Venlig hilsen
>>> Martin
>>
>> Det fungerer fint i FF.
>> Det er Date.now() der er problemet - IE forstår den ikke (har så ikke
>> testet de andre) Date.now er del af EMCA-262 5. edition. Så der kan nok
>> gå lidt tid før IE er med...
>>
>> Så er du nødt til at oprette et Date object og bruge den oprindelige kode.
>> var now=new Date();
>> var now_millisecs=now.valueOf();
>> eller bare
>> var now_millisecs= (new Date()).valueOf();
>> som selvfølgelig også kan indsættes i den endelige - men det begynder
>> måske så at knibe med læsbarheden....
>> var day_cnt = Math.ceil(( Date.UTC(2010,11,12)-((new
>> Date).valueOf())/86400000);
>>
>> Har ikke testet...
>>
>> Birger
>>
>
> Hej Birger
>
> Mange tak for din forklaring og dien løsningsforslag.
> Jeg har prøvet lidt forskelligt, em uanset hvad får
> jeg den samme fejl, når jeg validerer.
>
> http://www.detour.dk/js/trim-countdown.htm
>
> Det er måske fordi syntaksen ikke er helt korrekt,
> men jeg har vist lige mistet overblikket alligevel.
> Det gør ikke noget, at scriptet fylder et par linjer
> ekstra, så længe jeg har nogenlunde overblik over,
> hvad der foregår.
>
> Det har jeg ikke lige nu

Så gør det sådan:
var now=new Date();
var now_millisecs=now.valueOf();
var day_cnt = Math.ceil((
Date.UTC(2010,11,12,1)-now_millisecs)/86400000);
Det burde virke...

Ellers er det noget helt andet...
Du definerer et XHTML document. Hvis ovenstående ikke virker, så prøv
at skifte til HTMl 4.01, og pak koden ind i kommentar tags.
Det kan godt være < og > der skubbe IE af pinden, og JS skal i XHTML
markeres som CDATA - og jeg plejer at have JS i separate filer (det kan
du selvfølgelig også prøve, men så dakl det i en funktion, der kaldes
på onload i body - så det andet er nemmere i en afprøvning) - og jeg
kan altså ikke lige huske hvoran CDATA markeres i hovedet...

Birger

Jeg kan godt lave en gennemgang af koden - eller skrive nogle
kommentarer til, hvis du vil. Det bliver bare ikke i dag før i
morgen...

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Martin Ploug (09-12-2010)
Kommentar
Fra : Martin Ploug


Dato : 09-12-10 22:06

Den 09-12-2010 21:36, Birger Sørensen skrev:
> Efter mange tanker skrev Martin Ploug:
>> Den 09-12-2010 20:57, Birger Sørensen skrev:
>>> Martin Ploug tastede følgende:
>>>> Den 09-12-2010 20:11, Martin Ploug skrev:
>>>>> Den 09-12-2010 19:41, Martin Ploug skrev:
>>>>>> Den 09-12-2010 19:32, Birger Sørensen skrev:
>>>>>>> Birger Sørensen forklarede den 09-12-2010:
>>>>>>> 8x
>>>>>>>> var day_cnt = Math.ceil((
>>>>>>>> Date.UTC(2010,11,12,+1)-Date.now())/86400000);
>>>>>>> 8x
>>>>>>>
>>>>>>> Eller blot
>>>>>>> var day_cnt = Math.ceil(( Date(2010,11,12)-Date.now())/86400000);
>>>>>>>
>>>>>>> Birger
>>>>>>>
>>>>>> Hej Birger
>>>>>>
>>>>>> Super! Mange tak for dine kommentarer.
>>>>>> Jeg prøver at få det strammet op, og vender så måske tilbage
>>>>>> i tråden
>>>>>>
>>>>>> Venlig hilsen
>>>>>> Martin
>>>>>>
>>>>> Måske den mangler .UTC
>>>>
>>>> Hmm, det løste det med antallet, men der er åbenbart fortsat en fejl
>>>> omkring if ( day_cnt < 0 ) {
>>>>
>>>> Venlig hilsen
>>>> Martin
>>>
>>> Det fungerer fint i FF.
>>> Det er Date.now() der er problemet - IE forstår den ikke (har så ikke
>>> testet de andre) Date.now er del af EMCA-262 5. edition. Så der kan nok
>>> gå lidt tid før IE er med...
>>>
>>> Så er du nødt til at oprette et Date object og bruge den oprindelige
>>> kode.
>>> var now=new Date();
>>> var now_millisecs=now.valueOf();
>>> eller bare
>>> var now_millisecs= (new Date()).valueOf();
>>> som selvfølgelig også kan indsættes i den endelige - men det begynder
>>> måske så at knibe med læsbarheden....
>>> var day_cnt = Math.ceil(( Date.UTC(2010,11,12)-((new
>>> Date).valueOf())/86400000);
>>>
>>> Har ikke testet...
>>>
>>> Birger
>>>
>>
>> Hej Birger
>>
>> Mange tak for din forklaring og dien løsningsforslag.
>> Jeg har prøvet lidt forskelligt, em uanset hvad får
>> jeg den samme fejl, når jeg validerer.
>>
>> http://www.detour.dk/js/trim-countdown.htm
>>
>> Det er måske fordi syntaksen ikke er helt korrekt,
>> men jeg har vist lige mistet overblikket alligevel.
>> Det gør ikke noget, at scriptet fylder et par linjer
>> ekstra, så længe jeg har nogenlunde overblik over,
>> hvad der foregår.
>>
>> Det har jeg ikke lige nu
>
> Så gør det sådan:
> var now=new Date();
> var now_millisecs=now.valueOf();
> var day_cnt = Math.ceil(( Date.UTC(2010,11,12,1)-now_millisecs)/86400000);
> Det burde virke...
>
> Ellers er det noget helt andet...
> Du definerer et XHTML document. Hvis ovenstående ikke virker, så prøv at
> skifte til HTMl 4.01, og pak koden ind i kommentar tags.
> Det kan godt være < og > der skubbe IE af pinden, og JS skal i XHTML
> markeres som CDATA - og jeg plejer at have JS i separate filer (det kan
> du selvfølgelig også prøve, men så dakl det i en funktion, der kaldes på
> onload i body - så det andet er nemmere i en afprøvning) - og jeg kan
> altså ikke lige huske hvoran CDATA markeres i hovedet...
>
> Birger
>
> Jeg kan godt lave en gennemgang af koden - eller skrive nogle
> kommentarer til, hvis du vil. Det bliver bare ikke i dag før i morgen...
>

Bingo!
Nu tror jeg, at den er der.
Mange tak for hjælpen. Det hjalp også med at pakke det ind i CDATA, som
du skrev http://javascript.about.com/library/blxhtml.htm

Mit (der faktisk er dit) seneste script ser nu sådan ud:
http://www.detour.dk/js/countdown-days.htm

Ja, jeg tror også jeg vil til at holde for i dag, men fedt lige at nå så
langt. Måske kan vi kigge på det med kommentarerne i morgen.

Venlig hilsen
Martin

Martin Ploug (10-12-2010)
Kommentar
Fra : Martin Ploug


Dato : 10-12-10 17:48

Den 09-12-2010 22:05, Martin Ploug skrev:
> Den 09-12-2010 21:36, Birger Sørensen skrev:
>> Efter mange tanker skrev Martin Ploug:
>>> Den 09-12-2010 20:57, Birger Sørensen skrev:
>>>> Martin Ploug tastede følgende:
>>>>> Den 09-12-2010 20:11, Martin Ploug skrev:
>>>>>> Den 09-12-2010 19:41, Martin Ploug skrev:
>>>>>>> Den 09-12-2010 19:32, Birger Sørensen skrev:
>>>>>>>> Birger Sørensen forklarede den 09-12-2010:
>>>>>>>> 8x
>>>>>>>>> var day_cnt = Math.ceil((
>>>>>>>>> Date.UTC(2010,11,12,+1)-Date.now())/86400000);
>>>>>>>> 8x
>>>>>>>>
>>>>>>>> Eller blot
>>>>>>>> var day_cnt = Math.ceil(( Date(2010,11,12)-Date.now())/86400000);
>>>>>>>>
>>>>>>>> Birger
>>>>>>>>
>>>>>>> Hej Birger
>>>>>>>
>>>>>>> Super! Mange tak for dine kommentarer.
>>>>>>> Jeg prøver at få det strammet op, og vender så måske tilbage
>>>>>>> i tråden
>>>>>>>
>>>>>>> Venlig hilsen
>>>>>>> Martin
>>>>>>>
>>>>>> Måske den mangler .UTC
>>>>>
>>>>> Hmm, det løste det med antallet, men der er åbenbart fortsat en fejl
>>>>> omkring if ( day_cnt < 0 ) {
>>>>>
>>>>> Venlig hilsen
>>>>> Martin
>>>>
>>>> Det fungerer fint i FF.
>>>> Det er Date.now() der er problemet - IE forstår den ikke (har så ikke
>>>> testet de andre) Date.now er del af EMCA-262 5. edition. Så der kan nok
>>>> gå lidt tid før IE er med...
>>>>
>>>> Så er du nødt til at oprette et Date object og bruge den oprindelige
>>>> kode.
>>>> var now=new Date();
>>>> var now_millisecs=now.valueOf();
>>>> eller bare
>>>> var now_millisecs= (new Date()).valueOf();
>>>> som selvfølgelig også kan indsættes i den endelige - men det begynder
>>>> måske så at knibe med læsbarheden....
>>>> var day_cnt = Math.ceil(( Date.UTC(2010,11,12)-((new
>>>> Date).valueOf())/86400000);
>>>>
>>>> Har ikke testet...
>>>>
>>>> Birger
>>>>
>>>
>>> Hej Birger
>>>
>>> Mange tak for din forklaring og dien løsningsforslag.
>>> Jeg har prøvet lidt forskelligt, em uanset hvad får
>>> jeg den samme fejl, når jeg validerer.
>>>
>>> http://www.detour.dk/js/trim-countdown.htm
>>>
>>> Det er måske fordi syntaksen ikke er helt korrekt,
>>> men jeg har vist lige mistet overblikket alligevel.
>>> Det gør ikke noget, at scriptet fylder et par linjer
>>> ekstra, så længe jeg har nogenlunde overblik over,
>>> hvad der foregår.
>>>
>>> Det har jeg ikke lige nu
>>
>> Så gør det sådan:
>> var now=new Date();
>> var now_millisecs=now.valueOf();
>> var day_cnt = Math.ceil((
>> Date.UTC(2010,11,12,1)-now_millisecs)/86400000);
>> Det burde virke...
>>
>> Ellers er det noget helt andet...
>> Du definerer et XHTML document. Hvis ovenstående ikke virker, så prøv at
>> skifte til HTMl 4.01, og pak koden ind i kommentar tags.
>> Det kan godt være < og > der skubbe IE af pinden, og JS skal i XHTML
>> markeres som CDATA - og jeg plejer at have JS i separate filer (det kan
>> du selvfølgelig også prøve, men så dakl det i en funktion, der kaldes på
>> onload i body - så det andet er nemmere i en afprøvning) - og jeg kan
>> altså ikke lige huske hvoran CDATA markeres i hovedet...
>>
>> Birger
>>
>> Jeg kan godt lave en gennemgang af koden - eller skrive nogle
>> kommentarer til, hvis du vil. Det bliver bare ikke i dag før i morgen...
>>
>
> Bingo!
> Nu tror jeg, at den er der.
> Mange tak for hjælpen. Det hjalp også med at pakke det ind i CDATA, som
> du skrev http://javascript.about.com/library/blxhtml.htm
>
> Mit (der faktisk er dit) seneste script ser nu sådan ud:
> http://www.detour.dk/js/countdown-days.htm
>
> Ja, jeg tror også jeg vil til at holde for i dag, men fedt lige at nå så
> langt. Måske kan vi kigge på det med kommentarerne i morgen.
>
> Venlig hilsen
> Martin

Jeg poster lige kildekoden her i tråden for en ordens skyld:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Trimmet JS countdown</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>

<script type="text/javascript">
/* <![CDATA[ */

var now=new Date();
var now_millisecs=now.valueOf();
var day_cnt = Math.ceil(( Date.UTC(2010,11,12,1)-now_millisecs)/86400000);

var txt = 'hjemmesiden lukker ';

if (day_cnt <0)
{
txt = 'hjemmesiden er lukket.';
}
else {
switch ( day_cnt ) {
case 0 : txt += 'i dag'; break;
case 1 : txt += 'i morgen'; break;
default : txt += 'om '+ day_cnt +' dage.';
}
}
document.write( txt);
/* ]]> */
</script>

</body>
</html>



Birger Sørensen (10-12-2010)
Kommentar
Fra : Birger Sørensen


Dato : 10-12-10 20:46

Martin Ploug kom med denne ide:
> <script type="text/javascript">
> /* <![CDATA[ */
>
> var now=new Date();
> var now_millisecs=now.valueOf();
> var day_cnt = Math.ceil(( Date.UTC(2010,11,12,1)-now_millisecs)/86400000);
>
> var txt = 'hjemmesiden lukker ';
>
> if (day_cnt <0)
> {
> txt = 'hjemmesiden er lukket.';
> }
> else {
> switch ( day_cnt ) {
> case 0 : txt += 'i dag'; break;
> case 1 : txt += 'i morgen'; break;
> default : txt += 'om '+ day_cnt +' dage.';
> }
> }
> document.write( txt);
> /* ]]> */
> </script>

<script type="text/javascript">
/* <![CDATA[ */
var now=new Date(); // opretter nyt Date object, med tidpunkt lige nu
var now_millisecs=now.valueOf(); // returnerer dette tidspunkt som
millisekunder siden 1/1-1970
//Date.UTC returnerer det tilvarende antal millisekunder for den
angivne dag
// bemærk at timerne er sat til 1 - dette korrigerer for DK's tidszone
i forhold til UTC
var day_cnt = Math.ceil((
Date.UTC(2010,11,12,1)-now_millisecs)/86400000); // Antal hele døgn
til den angivne dato (11/12-2010) 86400000 = 1000*60*60*24 altså
antallet af millisekunder på et døgn

var txt = 'hjemmesiden lukker '; // definerer og initialiserer en
variabel - default er en del af teksten der ellers skal gentages flere
gange i switchen
if (day_cnt <0) { // hvis antallet af dage er negativt, er fristen
overskredet
txt = 'hjemmesiden er lukket.'; // og teksten sættes tilsvarende
}
else { // hvis antallet af dage ikke er negativt
switch ( day_cnt ) { // vælges een af følgende, og teksten sætte
case 0 : txt += 'i dag'; break;
case 1 : txt += 'i morgen'; break;
default : txt += 'om '+ day_cnt +' dage.';
}
}
document.write( txt); // Udskriv teksten
/* ]]> */
</script>

Uklare punkter - spørg

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Martin Ploug (10-12-2010)
Kommentar
Fra : Martin Ploug


Dato : 10-12-10 22:31

Den 10-12-2010 20:46, Birger Sørensen skrev:
> Martin Ploug kom med denne ide:
>> <script type="text/javascript">
>> /* <![CDATA[ */
>>
>> var now=new Date();
>> var now_millisecs=now.valueOf();
>> var day_cnt = Math.ceil((
>> Date.UTC(2010,11,12,1)-now_millisecs)/86400000);
>>
>> var txt = 'hjemmesiden lukker ';
>>
>> if (day_cnt <0)
>> {
>> txt = 'hjemmesiden er lukket.';
>> }
>> else {
>> switch ( day_cnt ) {
>> case 0 : txt += 'i dag'; break;
>> case 1 : txt += 'i morgen'; break;
>> default : txt += 'om '+ day_cnt +' dage.';
>> }
>> }
>> document.write( txt);
>> /* ]]> */
>> </script>
>
> <script type="text/javascript">
> /* <![CDATA[ */
> var now=new Date(); // opretter nyt Date object, med tidpunkt lige nu
> var now_millisecs=now.valueOf(); // returnerer dette tidspunkt som
> millisekunder siden 1/1-1970
> //Date.UTC returnerer det tilvarende antal millisekunder for den angivne
> dag
> // bemærk at timerne er sat til 1 - dette korrigerer for DK's tidszone i
> forhold til UTC
> var day_cnt = Math.ceil((
> Date.UTC(2010,11,12,1)-now_millisecs)/86400000); // Antal hele døgn til
> den angivne dato (11/12-2010) 86400000 = 1000*60*60*24 altså antallet af
> millisekunder på et døgn
>
> var txt = 'hjemmesiden lukker '; // definerer og initialiserer en
> variabel - default er en del af teksten der ellers skal gentages flere
> gange i switchen
> if (day_cnt <0) { // hvis antallet af dage er negativt, er fristen
> overskredet
> txt = 'hjemmesiden er lukket.'; // og teksten sættes tilsvarende
> }
> else { // hvis antallet af dage ikke er negativt
> switch ( day_cnt ) { // vælges een af følgende, og teksten sætte
> case 0 : txt += 'i dag'; break;
> case 1 : txt += 'i morgen'; break;
> default : txt += 'om '+ day_cnt +' dage.';
> }
> }
> document.write( txt); // Udskriv teksten
> /* ]]> */
> </script>
>
> Uklare punkter - spørg
>
> Birger
>

Hej Birger

Meget fornemt, mange tak for det.
En lille ting til...
Nede ved switch skriver du:
// vælges een af følgende, og teksten sætte

Skal der ikke i stedet stå noget i retning af:

// vælges een af følgende, og den pågældende tekst tilføjes efter
// variablen txt

?

Så er jeg vist også kommet i småtingsafdelingen

Venlig hilsen
Martin



Birger Sørensen (10-12-2010)
Kommentar
Fra : Birger Sørensen


Dato : 10-12-10 23:24

Martin Ploug har bragt dette til os:
> Den 10-12-2010 20:46, Birger Sørensen skrev:
>> Martin Ploug kom med denne ide:
>>> <script type="text/javascript">
>>> /* <![CDATA[ */
>>>
>>> var now=new Date();
>>> var now_millisecs=now.valueOf();
>>> var day_cnt = Math.ceil((
>>> Date.UTC(2010,11,12,1)-now_millisecs)/86400000);
>>>
>>> var txt = 'hjemmesiden lukker ';
>>>
>>> if (day_cnt <0)
>>> {
>>> txt = 'hjemmesiden er lukket.';
>>> }
>>> else {
>>> switch ( day_cnt ) {
>>> case 0 : txt += 'i dag'; break;
>>> case 1 : txt += 'i morgen'; break;
>>> default : txt += 'om '+ day_cnt +' dage.';
>>> }
>>> }
>>> document.write( txt);
>>> /* ]]> */
>>> </script>
>>
>> <script type="text/javascript">
>> /* <![CDATA[ */
>> var now=new Date(); // opretter nyt Date object, med tidpunkt lige nu
>> var now_millisecs=now.valueOf(); // returnerer dette tidspunkt som
>> millisekunder siden 1/1-1970
>> //Date.UTC returnerer det tilvarende antal millisekunder for den angivne
>> dag
>> // bemærk at timerne er sat til 1 - dette korrigerer for DK's tidszone i
>> forhold til UTC
>> var day_cnt = Math.ceil((
>> Date.UTC(2010,11,12,1)-now_millisecs)/86400000); // Antal hele døgn til
>> den angivne dato (11/12-2010) 86400000 = 1000*60*60*24 altså antallet af
>> millisekunder på et døgn
>>
>> var txt = 'hjemmesiden lukker '; // definerer og initialiserer en
>> variabel - default er en del af teksten der ellers skal gentages flere
>> gange i switchen
>> if (day_cnt <0) { // hvis antallet af dage er negativt, er fristen
>> overskredet
>> txt = 'hjemmesiden er lukket.'; // og teksten sættes tilsvarende
>> }
>> else { // hvis antallet af dage ikke er negativt
>> switch ( day_cnt ) { // vælges een af følgende, og teksten sætte
>> case 0 : txt += 'i dag'; break;
>> case 1 : txt += 'i morgen'; break;
>> default : txt += 'om '+ day_cnt +' dage.';
>> }
>> }
>> document.write( txt); // Udskriv teksten
>> /* ]]> */
>> </script>
>>
>> Uklare punkter - spørg
>>
>> Birger
>>
>
> Hej Birger
>
> Meget fornemt, mange tak for det.
> En lille ting til...
> Nede ved switch skriver du:
> // vælges een af følgende, og teksten sætte
>
> Skal der ikke i stedet stå noget i retning af:
>
> // vælges een af følgende, og den pågældende tekst tilføjes efter
> // variablen txt
>
> ?
>
> Så er jeg vist også kommet i småtingsafdelingen
>
> Venlig hilsen
> Martin

Det er rigtigt ... begge dele

Det er tilføjelser i switchen. Men teksten er netop udformet så der
skal tilføjes og ikke overskrives, og det kan man vel godt pointere i
kommentarer.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Søg
Reklame
Statistik
Spørgsmål : 177415
Tips : 31962
Nyheder : 719565
Indlæg : 6407849
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste