Как запускать Javascript оповещение каждую пятницу в 16:00
Возможно ли это с помощью setInterval()?
В приведенном ниже примере предупреждение каждые 5 секунд...
<script type="text/javascript">
setInterval(function() {
// alert("Message to alert every 5 seconds");
}, 5000);
</script>
Я пытаюсь запустить push-уведомление в сафари внутри функции интервала, возможно, это не лучшая практика, но пока это обходной путь
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();
}
});
});
4 ответа
Вы можете использовать что-то вроде:
<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. Вы можете продолжить отсюда:)
Обновление: проверяет дату каждые 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>
Надеюсь, поможет.
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);
Вы можете просто проверить каждую секунду, если день, часы, минуты и секунды соответствуют пятнице 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);
};
Не уверен, если это рекомендуется, хотя..
Отказ от ответственности: этот ответ описывает только необходимый алгоритм.
Во-первых, вы должны предположить, что окно браузера с веб-сайтом остается открытым до пятницы. Если нет, это бесполезно, и вы, вероятно, не хотите делать это на веб-сайте.
Если вы все еще хотите пойти дальше, вам нужно создать новый объект Date, который вы найдете в следующую пятницу в 16:00. Вы должны принять во внимание часовой пояс. Вы хотите GMT, или часовой пояс сервера, или фиксированный, или часовой пояс пользователя (и даже знаете ли вы, что?) Затем вы должны вычислить разницу между этой временной меткой и сейчас. Преобразуйте это в миллисекунды и установите интервал.
Есть несколько хороших ответов о том, как получить будущую дату с определенным днем недели в разделе Получить дату определенного дня недели в JavaScript. Оттуда вам нужно только сделать некоторые основные расчеты.