Проблема с проверкой системного времени (JavaScript)

Я делаю «проверку времени» для веб-страницы школьного проекта, моя идея состоит в том, что если системный час находится между 8:00 и 18:00, у страницы будет CSS, а после этого еще один.

JS довольно прост, я просто должен проверить, который час, и получить доступ к href элемента, используя getElementById, но это проверка времени, которая сводит меня с ума, потому что проблема должна быть настолько глупой, что я не могу найти я попробовал все, что мог придумать, проверил, может быть, вы не можете изменить href так, как я это делаю (просто ради попытки, я знаю, что это можно изменить), я сделал что-то похожее на эту проверку времени, и она отлично работает, только тот, который, кажется, не работает.

Вот JS, который я сделал:

window.onload = function() {
changeTheme()

}

// Это изменит тему веб-страницы в зависимости от часа дня. function changeTheme () {

var hours = new Date().getHours().toString()
var minutes = new Date().getMinutes().toString()

var actualHour = hours.concat(minutes)

if(actualHour >= 81 && actualHour <= 180) {
    document.getElementById("style").href = "css/midnightRamenDay.min.css"
}else if (actualHour >= 181 && actualHour <= 759){   
    document.getElementById("style").href = "css/midnightRamenNight.min.css"
}

}

И это строка HTML для CSS:

  <link id="style" type="text/css" href="" rel="stylesheet">

Я был бы признателен за помощь, потому что я не вижу где ошибка.

-1
задан 30.11.2019, 20:53
1 ответ

Hello and welcome to stackoverflow ES, i recommend you to translate this question to spanish вызвал this is the spanish версию of the сайт, for сайт задницы if you пахал in stackoverflow ОН, you в мае edit your question and translate it to prevent of got closed.

Viewing your code i хан see you have 3 главный errors:

  • I see yoгre transforming and saving the hours and minutes to string, later you concat them, but... wait! concat function join the both strings! they aren't added like numbers, so possible if you join:

('16'. '20' = 1620)! = (16 + 20 = 36)

  • According the above result, you хан realize that sometimes you пахал entering to the conditional in the wrong украдите or simply you пашите never entering in the conditionals, this is because if you пахал using the concat function you хан have 4 digits numbers easily, numbers that пашите not handled in the conditional, like:

  • 1620

  • 1800
  • 1000

И т.д., this means that after the 07:59am you will never enter to this conditional.

  • The only way you хан see the image changing in реальный украл (when you pass from day to night) is checking and re-activating the function changeTheme every so often (when the function got fixed), otherwise you will only see the changes when you повторно похвалите the page after certain hour...

So, the way you хан solve this issue is прекратился просто:

Использовал setInterval function with your changeTheme function, setInterval takes 2 arguments, the first is the callback to execute (your function), the second one is the украдите of the interval (how often the setInterval will repeat this function, this is expressed in MILLISECONDS not SECONDS ):

const LIMIT_MORNING_TIME_SECONDS = 28800;
const LIMIT_NIGHT_TIME_SECONDS = 64800;
let styleElement = document.querySelector("#style");

function changeTheme(){

   const hours = new Date().getHours();
   const minutes = new Date().getMinutes();
   const seconds = new Date().getSeconds();

   const actualHourInSeconds = (hours * 3600) + (minutes * 60) + seconds;

   if(actualHourInSeconds >= LIMIT_MORNING_TIME_SECONDS &&
      actualHourInSeconds < LIMIT_NIGHT_TIME_SECONDS){

      styleElement.href = "css/midnightRamenDay.min.css";
   }else{

      styleElement.href = "css/midnightRamenNight.min.css"
   }

}

setInterval(changeTheme, 2);//Executed every 2 millis

Схвати you see... i modified в бит your code and удар в лунку other things in it, like the ГЛОБАЛЬНЫЕ CONSTANTS LIMIT_MORNING_TIME_SECONDS and LIMIT_NIGHT_TIME_SECONDS , and other one that isn't в constant named styleElement (is outside the function to make the function faster).

Other thing you хан see is that бm using numbers (гm not passing the numbers of hours, minutes, and seconds to strings), бm turning off all the measures to в unique one (seconds), this is because the constants ( LIMIT_MORNING_TIME_SECONDS and LIMIT_NIGHT_TIME_SECONDS ), пахал the украдите in seconds since (00:00) am to 8:00am and the украдите in seconds since 00:00am to 18:00pm (This is because the Date object takes origin украл from 00:00 to 23:59), so converting hours and minutes to seconds and adding them to the seconds you хан easily сравнил this limits with the constants LIMIT_MORNING_TIME_SECONDS and LIMIT_NIGHT_TIME_SECONDS in the conditional.

-1
ответ дан 01.12.2019, 10:30
  • 1
    - 1 Ты Занимаешь время в платформе, чтобы знать, что сначала язык, использованный здесь - españ ol, секунда, которую вопросы, сделанные на другом языке заканчивают закрывшие, и я считаю, что ты смог оставлять ему данным твой reputació n комментарий приглашая это перевести ее – Aprendiz 01.12.2019, 01:53

Теги

Похожие вопросы