Я использую moment.js для сравнения даты и времени, но пока безуспешно.Я хочу включить функциональность на моем веб-сайте в определенный промежуток времени.Я получаю datetime в формате json, который сохраняется в базе данных как utc datetime.Теперь я хочу проверить, находится ли текущая дата-время между временем начального и конечного временного интервала.
- Если он упадет до времени начала слота, я покажу пользователю сообщение «x-минуты для активации»
- , если он попадет между ними, то «функция активирована».
- если он падает по истечении времени окончания интервала, никаких действий не требуется.
Это то, что я сделал.Он работает большую часть времени, но все же есть некоторые случаи, когда он терпит неудачу.
function checkEqual(startDateTime, endDateTime) {
var startDateTimeVal = startDateTime.substring(startDateTime.indexOf("(") + 1, startDateTime.indexOf(")"));
var endDateTimeVal = endDateTime.substring(endDateTime.indexOf("(") + 1, endDateTime.indexOf(")"));
const s = new Date(parseInt(startDateTimeVal));
const e = new Date(parseInt(endDateTimeVal));
const d = new Date();
var timeToActivate = 0, timeToActivateHours = 0, timeToActivateMinutes = 0;
if (s.getUTCDate() === d.getDate() && s.getUTCMonth() === d.getMonth() && s.getFullYear() === d.getFullYear()) { // date
if (s.getUTCHours() <= d.getHours() && e.getUTCHours() >= d.getHours()) { // hours
if (s.getUTCHours() === d.getHours()) {
if (s.getUTCMinutes() <= d.getMinutes()) {
return new Promise(function (resolve, reject) {
resolve(0);
});
}
else {
return new Promise(function (resolve, reject) {
timeToActivate = s.getUTCMinutes() - d.getMinutes();
toastr.info("chat will become active in next " + parseInt(timeToActivate) + " minutes!");
resolve(timeToActivate * 60000);
});
}
}
else if (e.getUTCHours() === d.getHours()) {
if (e.getUTCMinutes() <= d.getMinutes()) {
return new Promise(function (resolve, reject) {
resolve(0);
});
}
else {
return new Promise(function (resolve, reject) {
timeToActivate = e.getUTCMinutes() - d.getMinutes();
toastr.info(" chat will become active in next " + parseInt(timeToActivate) + " minutes!");
resolve(timeToActivate * 60000);
});
}
}
else {
if (s.getUTCMinutes() <= d.getMinutes()) {
return new Promise(function (resolve, reject) {
resolve(0);
});
}
else {
return new Promise(function (resolve, reject) {
timeToActivate = s.getUTCMinutes() - d.getMinutes();
toastr.info("chat will become active in next " + parseInt(timeToActivate) + " minutes!");
resolve(timeToActivate * 60000);
});
}
}
}
else {
if (s.getUTCHours() >= d.getHours()) { // logged in before time
return new Promise(function (resolve, reject) {
var timeToActivateHours = (s.getUTCHours() - d.getHours()) * 3600000;
var timeToActivateMinutes;
if (s.getUTCMinutes() > d.getMinutes()) {
timeToActivateMinutes = (d.getMinutes() - s.getUTCMinutes()) * 60000;
}
else {
timeToActivateMinutes = (s.getUTCMinutes()- d.getMinutes() ) * 60000;
}
timeToActivate = timeToActivateHours + timeToActivateMinutes;
toastr.info("chat will become active in next " + parseInt(timeToActivate / 60000) + " minutes!");
resolve(timeToActivate);
});
}
}
}
return new Promise(function (resolve, reject) {
resolve(-1);
});
}
Совсем недавно я пытался использовать функцию сравнения, но все еще есть проблемы, поскольку utc и местный часовой пояс даюту меня болит голова.есть дата и время начала и окончания.
Дата и время начала: / Дата (1551966300000) /
Дата и время окончания: / Дата (1551969900000) /
Любое руководство очень ценится!