Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Aikalaskuri kilpailun alkuun Javascriptillä

PetriKeckman [28.05.2023 18:56:17]

#

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>

muuskanuikku [29.05.2023 08:22:11]

#

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);

jalski [29.05.2023 10:05:44]

#

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 ;

PetriKeckman [29.05.2023 13:04:27]

#

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 "-"

PetriKeckman [29.05.2023 13:11:07]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta