Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как выполнить нужные условия до и после определенной даты JS? (https://javascript.ru/forum/dom-window/76130-kak-vypolnit-nuzhnye-usloviya-do-i-posle-opredelennojj-daty-js.html)

bridun 07.12.2018 19:18

Как выполнить нужные условия до и после определенной даты JS?
 
Нашел небольшой скрипт, который автоматически запускает видео с Youtube в определенное время (автовебинар). Например, в 20:00, 22:00 и тд . Если пользователь открыл видео в 20:10, то плеер автоматически мотает видео на 10-ю минуту. Не разберусь, как давать разный набор инструкций, если пользователь открыл страницу:

до начала вебинара (до 19:55) (пришел раньше)
в течение 20 минут после старта (20:20) (пришёл вовремя)
позже 30 минут после старта.


В коде есть комментарий капсом, где я пытаюсь создавать разный набор инструкций.

Благодарю за помощь. Новичок, делаю методом научного тыка. Помогите дописать код для себя.

<script src="playerjs.js" type="text/javascript"></script>
<div id="player"></div>
<button onclick="seekToTime()">Перейти</button>
/*
var now = new Date(); // Текущая дата
       var event_date = new Date ("Jul 17 2018 11:30:00 GMT+0300"); // дата события (+ часовой пояс, крайне обязательно)
       var dif_time = now.getTime() - event_date.getTime(); // разность в милисикундах по UTC (время приведено в один часовой пояс, крайне удачно)
       var duration = 60 * 60 * 1000; // время длительности вебинара в милисекундах
       switch(true)
       {
           case dif_time < 0:
            // действия до события
            break;
          case dif_time >= 0 && dif_time < duration:
            // действия во время события до окончания, (dif_time / 1000) - куда перематывать
            break;
          case dif_time >= duration:
            // действия после окончания события
            break;
       }


	   
	var event_date = new Date ("Jul 17 2018 11:30:00 GMT+0300");   
	   
	   
	var now = new Date(); // Текущая дата
  var event_date = new Date((now.getFullYear() + '.' + (now.getMonth() + 1) + '.' + now.getDate()) + " 11:30:00 GMT+0300");   
	   
	 
	   
Кейс case dif_time < 0 убирается и вместо него добавляются такие кейсы:	   
	   
var before_time = 30 * 60 * 1000; // время длительности предстартового периода в милисекундах
  switch(true)
  {
     case  -dif_time > before_time:
        // действие до начала предстартового периода
         break;
     case  -dif_time <= before_time && dif_time < 0:
        // действие в предстартовый период
         break;
        ....
  }	   
	  
*/



   var player = new Playerjs({id:"player", poster: "people.png", file:"video.mp4"});
   console.log(player.api("id"));
 
     function startWebinar(){ 
     player.api("play");
     }
      function unmute(){ 
     player.api("unmute");
     }
     
    function seekToTime(){
    player.api("seek", playTimeOffset);
    } 
	
		//var now = new Date(); // Текущая дата
       //var event_date = new Date ("Jul 17 2018 11:30:00 GMT+0300"); // дата события (+ часовой пояс, крайне обязательно)
	     var event_date = new Date((now.getFullYear() + '.' + (now.getMonth() + 1) + '.' + now.getDate()) + " 00:03:00 GMT+0000", 'Europe/London'); 
       var dif_time = now.getTime() - event_date.getTime(); // разность в милисикундах по UTC (время приведено в один часовой пояс, крайне удачно)
       var duration = 60 * 60 * 1000; // время длительности вебинара в милисекундах
       switch(true)
       {
           case dif_time < 0:
            // действия до события
            break;
          case dif_time >= 0 && dif_time < duration:
            // действия во время события до окончания, (dif_time / 1000) - куда перематывать
            break;
          case dif_time >= duration:
            // действия после окончания события
       


    
    //var wHour = "23"; //час старта вебинара
    //var wMinute = "20"; //минута старта вебинара
    //var wTime = wHour + ":" + wMinute; //время старта вебинара
    //let firstDate = wTime; //время старта вебинара
    //let firstDate = event_date; //время старта вебинара    
    //вычисляем разницу между текущим временем (открытия страницы) и временем старта вебинара
    var currentDateTime = new Date();
    var hrs = currentDateTime.getHours();
    var mnts = currentDateTime.getMinutes();
    var secondDate = (hrs+":"+mnts); //текущее время
    let getDate = (string) => new Date(0, 0,0, string.split(':')[0], string.split(':')[1]);
    let different = (getDate(secondDate) - getDate(firstDate));
    let differentRes, hours, minuts;
        if(different > 0) {
          differentRes = different;
          hours = Math.floor((differentRes % 86400000) / 3600000);
          minuts = Math.round(((differentRes % 86400000) % 3600000) / 60000);
            } else {
              differentRes = Math.abs((getDate(firstDate) - getDate(secondDate)));
              hours = Math.floor(24 - (differentRes % 86400000) / 3600000);
              minuts = Math.round(60 - ((differentRes % 86400000) % 3600000) / 60000);
            }
    let result = hours + ':' + minuts; 
    var playTimeOffset = (hours*3600)+minuts*60; //разница в секундах между временем открытия страницы и временем старта вебинара для функции seekToTime (плеер принимает в секундах и бросает в нужный момент видео)
    //назначаем время старта вебинара
    var now = new Date(); // Текущая дата
    var webinarStartTime = new Date(now.getFullYear(), now.getMonth(), now.getDate(), wHour, wMinute, 0, 0) - now; 

    var timeOfWebinar = new Date(now.getFullYear(), now.getMonth(), now.getDate(), wHour, wMinute, 0, 0);
    console.log(timeOfWebinar);
    console.log(currentDateTime);

//ПЫТАЮСЬ ДАТЬ РАЗНЫЙ НАБОР ИНСТРУКЦИЙ В ЗАВИСИМОСТИ ОТ ВРЕМЕНИ ОТКРЫТИЯ СТРАНИЦЫ    

               //час после вебинара
                var hourAfter = new Date();
                 hourAfter = hourAfter.setHours(hourAfter.getHours() + 1);
                console.log(hourAfter, timeOfWebinar, webinarStartTime)
              
              //если текущее время больше на час
               if (hourAfter > timeOfWebinar){
                player.api("stop");
                //alert("Вы опоздали");
                }
                
                if (currentDateTime.getTime() >  timeOfWebinar.getTime())  {
                player.api("stop");
                //alert("За полчаса");
                
                }
                
          
                 //если с начала вебинара еще не прошел 1 час, то запускаемм плеер
                else{
                  startWebinar();
                    seekToTime();
                    unmute(); //включаем звук  
                    
                }
   
    
    /**
     ЛОГИКА РАБОТЫ:в определенное время несколько развдень по Москве запускается воспроизведение видео через плеер.
	 Если пользователь открыл страницу раньше до указаного начсала ато без 5 мин, то воспроизведение не начинается автоматически,
	 при попытке его запустить - незапускется, а дальше продолжает показываться GIF анимация ожидания трансляции
     
     Если открывает позже, то плеер начинает воспроизведение видео с той минуты, с которой пользователь вошел на вебинар от его начала,
	 то есть с 20:00. если зашел в 20:07, то видео начинает играть с 7-ой минуты ----  по окончанию выходим в расписание
	 
	 как бы еще таймер времени сюда прикрутить
     */

j0hnik 08.12.2018 01:55

var duration = player.getDuration(); //продолжительность [url]https://developers.google.com/youtube/iframe_api_reference?hl=ru[/url]
		now = Date.now(),
		start = new Date(2018, 11, 12, 17, 5).valueOf(), //начало трансляции
		end = start + duration * 1000; // конец трансляции

		if(now < start){
			var ost = new Date(now - start),
			s = Math.floor(ost/1000),
			m = Math.floor(s/60),
			h = Math.floor(m/60);
			s = s%60+'';
			m = m%60+'';
			h = h+'';
			h = h.length == 1 ? '0'+h:h;
			m = m.length == 1 ? '0'+m:m;
			s = s.length == 1 ? '0'+s:s;
			alert(`До начала трансляции ${h} часов ${m} минут ${s} секунд`);
		}
		else if(now > start && now < end ) location = `https://youtu.be/m51LZLiivZQ?t=${(start-now)/1000}`;
		else alert(`Трансляция окончена`);


скрипт не смотрел, ну как то так.


Часовой пояс GMT +3, время: 12:01.