Lasketaanpas päiviä, tunteja, minuutteja ja sekunteja kilpailun alkuun. Oletuksena, että kilpailu avataan keskiyöllä 1.6.2023 klo 00:00:00.00
https://petke.info/kilpailuun.html
Javascriptilla tehty. Itse käytän FireFox selainta, siinä tuo ei toimi. Näyttää oikean ajan Chrome ja Microsoft Edge selaimissa. FireFox yrittää kai korjata aikavyöhykettä tai jotain...Typerää, että selaimet tuolla tavalla erilailla käyttäytyvät.
En minä varmaankaan osaa tehdä kilpailutyötä, mutta jotenkin jännää odottaa mikä se tulee olemaan.
<HTML> <HEAD> <TITLE>Aikalaskuri kilpailun alkuun</TITLE> <LINK REV="made" HREF="mailto:petrikeckman(miukumauku)@gmail.com"> <META NAME="author" CONTENT="Petri Keckman"> <META NAME="description" CONTENT="Ohjelmointiputkan kilpailuun aikaa"> </HEAD> <BODY onload="Time()"> <center><img src="kilpailu.jpg"></center> <p id="time"></p> </BODY> <script> function Time() { var today = new Date(); var kilpailu = new Date("2023-6-1"); var diffMs = (kilpailu - today) + (0 * 60 * 60 * 1000); // millisekunteja kilpailuun nyt var diffDays = Math.floor(diffMs / 86400000); // days var diffHrs = Math.floor((diffMs % 86400000) / 3600000); // hours var diffMins = Math.floor(((diffMs % 86400000) % 3600000) / 60000); // minuutit var diffSecs = Math.floor((((diffMs % 86400000) % 3600000) % 60000) / 1000); // sekunnit document.getElementById("time").innerHTML = "<br><br><font size='+50' color='black'><center>" + diffDays + " päivää<br>" + diffHrs + " tuntia<br>" + diffMins + " minuuttia<br>" + diffSecs + " sekuntia <br>Ohjelmointiputkan kilpailun alkuun.</center></font>"; t=setTimeout(function(){Time()},1000); } </script> </HTML>
Ainakin tuossa on sellainen vika, että joka kerta kun funktiota Time() kutsutaan, se kutsuu itseään kaksi kertaa lisää. Tämä on käytännössä muistivuoto, sillä (jonossa olevien) funktiokutsujen määrä kasvaa rajattomasti. Turhat funktiokutsut myös johtavat sovelluksen asteittaiseen hidastumiseen, kunnes selain kyykkää kokonaan.
Koodin laatu on muutenkin heikkoa, koska mitään standardeja ei noudateta...
Ja mikä ihme on tämä?
var diffMs = (kilpailu - today) + (0 * 60 * 60 * 1000);
muuskanuikku kirjoitti:
(29.05.2023 08:22:11): Ainakin tuossa on sellainen vika, että joka...
Itsekin tuon huomasin kokeillessa, kun suoritus pysähtyi muistin loppumiseen!
Mikä olisi oikeaoppinen tapa tehdä tuo JavaScriptillä?
Itse 8th:lla lasken näin:
: d:uptime \ d d -- s d:- 86400 n:* 86400 n:/mod swap 3600 n:/mod swap 60 n:/mod swap 60 n:mod 4 a:close "%d days, %d hours, %d minutes, %d seconds.\n" s:strfmt ;
Ja mikä ihme on tämä?
var diffMs = (kilpailu - today) + (0 * 60 * 60 * 1000);
Korjasin sillä alunperin sitä, että FireFox-selain näyttää väärää aikaa. Siinä oli ensin 0:n tilalla kerroin 2 (aikavyöhykkeen takia), mutta muutin sen 0:ksi. Kyseessä on siis "historiallinen jäänne".
EDIT: ja tais "+" tilallakin olla "-"
muuskanuikku kirjoitti:
Ainakin tuossa on sellainen vika, että joka kerta kun funktiota Time() kutsutaan, se kutsuu itseään kaksi kertaa lisää.
Totta tosiaan! Toinen oli tietysti turha. Poistin sivulta toisen ja se toimii edelleen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.