2017-01-07 2 views
-3

Возможно ли это с помощью setInterval()?Как запустить оповещение Javascript каждую пятницу в 16:00

В приведенном ниже примере, оповещение каждые 5 секунд ...

<script type="text/javascript"> 
    setInterval(function() { 
    // alert("Message to alert every 5 seconds"); 
}, 5000); 
</script> 

Я пытаюсь запустить сафари толчок уведомление внутри функции интервала, может быть, это не лучшая практика, но это обходной путь для теперь

function Notifier() {} 

    // Returns "true" if this browser supports notifications. 
    Notifier.prototype.HasSupport = function() { 
     if (window.webkitNotifications) { 
     return true; 
     } else { 
     return false; 
     } 
    } 

    // Request permission for this page to send notifications. If allowed, 
    // calls function "cb" with true. 
    Notifier.prototype.RequestPermission = function(cb) { 
     window.webkitNotifications.requestPermission(function() { 
     if (cb) { cb(window.webkitNotifications.checkPermission() == 0); } 
     }); 
    } 

    // Popup a notification with icon, title, and body. Returns false if 
    // permission was not granted. 
    Notifier.prototype.Notify = function(icon, title, body) { 
     if (window.webkitNotifications.checkPermission() == 0) { 
     var popup = window.webkitNotifications.createNotification(
     icon, title, body); 
     popup.show(); 

     return true; 
     } 

     return false; 
    } 

    $(function() { 
     var notifier = new Notifier(); 
     if (!notifier.HasSupport()) { 
     $("#error").show(); 
     return; 
     } 

     $("#request-permission").click(function() { 
     $("#error").hide(); 
     notifier.RequestPermission(); 
     }); 

     $(function() { 
     if (!notifier.Notify("#", "MESSAGE")) { 
      $("#error").text('Permission denied. Click "Request Permission" to give this domain access to send notifications to your desktop.'); 
      $("#error").show(); 
     } else { 
      $("#error").hide(); 
     } 
     }); 
    }); 
+0

Это больше похоже на проблемы математики здесь :)), сколько миллисекунд между каждой пятницы 16:00 – NinjaShawarma

+1

Что бы 5 второго цикла должны делать с пятницы @ 4 вечера? – j08691

+0

@ j08691 Мне нужно это предупреждение для запуска каждую пятницу в 16:00, это имеет смысл в конце? – NinjaShawarma

ответ

1

Вы можете использовать что-то вроде:

<script type="text/javascript"> 
    var date = new Date(); 
    console.log(date.getDay()); 
    console.log(date.getHours()); 
    if(date.getDay() === 6 && date.getHours() === 17) { 
     console.log("HELLO WORLD!"); 
    } 
</script> 

getDay() возвращает день недели от 1 до 7 (пятница будет в 5) и getHours() возвращает час от 1 до 24. Вы можете продолжить здесь :)

Update: это проверяет дату каждые 5 секунд с setInterval(), если это то, что вам нужно:

<script type="text/javascript"> 

function checkDate() { 
    var date = new Date(); 
    console.log(date.getDay()); 
    console.log(date.getHours()); 
    if(date.getDay() === 6 && date.getHours() === 17) { 
     console.log("HELLO WORLD!"); 
    } 
} 

var dateLoop = setInterval(function() { 
    checkDate(); 
},5000); 
</script> 
+0

А потом запустите его в петле? – simbabque

+0

Да, что бы вы ни делали, вы можете поместить это внутри функции, которая работает в цикле интервалов или с другим событием, которое работает. – MarioZ

+0

Запуск все время звучит очень дорого. Ну, может быть, когда вы запустите его раз в минуту, все будет в порядке. Это, безусловно, больше подходит для грубой силы по сравнению с фактическим вычислением в следующую пятницу. – simbabque

0

Отказа от ответственности: этот ответ описывает только необходимый алгоритм.

Во-первых, вам нужно предположить, что окно браузера с веб-сайтом остается открытым до пятницы. Если нет, это бесполезно, и вы, вероятно, не хотите делать это на веб-сайте.

Если вы все еще хотите продолжить, вам нужно создать новый объект Date, где вы найдете следующую пятницу в 16:00. Вы должны учитывать часовой пояс. Вы хотите, чтобы GMT или часовой пояс сервера, или фиксированный, или часовой пояс пользователя (и вы даже знаете это?) Затем вам нужно рассчитать разницу между этой меткой времени и сейчас. Преобразуйте это в миллисекунды и установите интервал.

Есть несколько хороших ответов на вопрос о том, как получить будущую дату с определенным рабочим днем ​​в Get date of specific day of the week in JavaScript. Оттуда вам нужно только выполнить некоторые базовые вычисления.

+0

Я отредактировал вопрос, чтобы мои намерения были понятны – NinjaShawarma

+0

Подход, описанный здесь, не изменяется с вашими разъяснениями @NinjaShawarma. – simbabque

0

Вы можете просто проверить каждый второй, если день, часов, минут и секунд матч Пятница 16:00:00

window.onload = function() { 
 
    setInterval(function() { 
 
    var date = new Date(); 
 
    if (date.getDay()==5 && date.getHours()==16 && date.getMinutes()==0 && date.getSeconds()==0) { 
 
     alert("4 O'CLOCK!"); 
 
    } 
 
    },1000); 
 
};
jsfiddle: https://jsfiddle.net/dwdek28r/1/

Не уверен, если это рекомендуется, но ..

0

Надеюсь, это поможет.

var dayOfWeek = 5; // friday 
var date = new Date(); 
date.setDate(date.getDate() + (dayOfWeek + 7 - date.getDay()) % 7); 
date.setHours(16,0,0,0) 

var dif = date.getTime() - new Date().getTime(); 
console.log(dif); 

setTimeout(function() { 
    // send alert or push notification 

}, dif); 
+0

Это позволяет отправлять функцию таймаута независимо от того, что такое setHours(). Просто для того, чтобы попробовать функцию, я изменил dayOfWeek на 6, который является Sat. См. Https://jsfiddle.net/15p21uxv/. Дайте мне знать, что вы думаете. Благодаря! – NinjaShawarma

Смежные вопросы