繁体   English   中英

检查特定日期的时间功能

[英]Time function that checks for certain days

我有以下时间函数,用于在业务打开或关闭时输出。 我的编码方式在正常的工作周内效果很好。 我想要做的是将其编程为假期,例如圣诞节,7月4日等总是在同一天的假期,因此输出显示我们已关闭。

固定假期我将如何编程?

function timeNow() {

    //Get time
    var d = new Date(),
    h = ('0' + d.getHours()).slice(-2),
    m = ('0' + d.getMinutes()).slice(-2);

    //Get Day
    new Date().getDay();
    var day = new Date().getDay();
    console.log(day);
    var operateDay = '';
    if (day >= 1 && day <= 5) {
        operateDay = true;
    } else if (day < 1 || day > 5) {
        operateDay = false;
    }

    // Checking time range
    var operatingTime = ((h >= 8 && h < 17) || (h === 8 && m == 0));
    var closedTime = (h >= 17 || h <= 8);
    var operateStatus = '';

    if ((operatingTime) && (operateDay = true)) {
        operateStatus = 'Our office is currently open';
        $('#closedWrap').addClass('block');
        $('#operationStatus').addClass('open');
    } else if (closedTime) {
        operateStatus = 'Our office is currently closed';
        $('#closedWrap').addClass('block');
        $('#operationStatus').addClass('closed');
    } else if (operateDay = false) {
        operateStatus = 'Our office is currently closed';
        $('#closedWrap').addClass('block');
        $('#operationStatus').addClass('closed');
    }

    return operateStatus;
}
var operation = timeNow();
$('#operationStatus').html(operation);

我已经修改了您的原始功能,并创建了一个初始版本 ,该初始版本可处理一个自定义的,易于“配置”的,人类可读的特定假期列表。

 /** * Returns the office's open/closed state. * * @param {Date} [time] - A custom Date object to override the current time. * @returns {string} The state of the office (open or closed). */ function timeNow(time) { // Holidays - month-day format, it's adjusted for human-readability, so // January is 1, February is 2 ... December is 12 var holidays = [ '01-01', // New Year's Day '07-04', // Independence Day, '11-11', // Veterans Day '12-25', // Chirstmas '12-31', // New Year's Eve ]; // Possibility of overriding the current date, if needed time = time || new Date(); // Get time var d = time, h = ('0' + d.getHours()).slice(-2), m = ('0' + d.getMinutes()).slice(-2); // Get day var day = time.getDay(); var operateDay = ''; if (day >= 1 && day <= 5) { operateDay = true; } else if (day < 1 || day > 5) { operateDay = false; } // Checking time range var operatingTime = ((h >= 8 && h < 17) || (h === 8 && m == 0)); var closedTime = (h >= 17 || h <= 8); var operateStatus = ''; // Check against holidays if the store is seemingly open // Since in JavaScipt's built-in Date object, January is 0, February is 1 ... December is 11, // to be humanly usable, add 1 to it, hence the name "adjusted" var adjustedMonth = time.getMonth() + 1; var dayOfMonth = time.getDate(); if (operatingTime) { for (var i = 0, len = holidays.length, holiday, holidayMonth, holidayDay; i < len; i++) { // Process the specific holiday month-date format holiday = holidays[i].split('-'); holidayMonth = parseInt(holiday[0], 10); holidayDay = parseInt(holiday[1], 10); // Check, whether today is a holiday ... if (adjustedMonth === holidayMonth && dayOfMonth === holidayDay) { // ...and if it is, then ...Hooray! Hooray! It's a Holi-Holiday operatingTime = false; closedTime = true; break; } } } if ((operatingTime) && (operateDay = true)) { operateStatus = 'Our office is currently open'; $('#closedWrap').addClass('block'); $('#operationStatus').addClass('open'); } else if (closedTime) { operateStatus = 'Our office is currently closed'; $('#closedWrap').addClass('block'); $('#operationStatus').addClass('closed'); } else if (operateDay = false) { operateStatus = 'Our office is currently closed'; $('#closedWrap').addClass('block'); $('#operationStatus').addClass('closed'); } return operateStatus; } // Testing var shouldBeOpen = [ '2018-06-25', '2018-06-26', '2018-06-27', '2018-06-28', '2018-06-29' ]; var shouldBeClosed = [ '2018-01-01', '2018-07-04', '2018-11-11', '2018-12-25', '2018-12-31', '2019-01-01' ]; var STATUS_OPEN = 'Our office is currently open'; var STATUS_CLOSED = 'Our office is currently closed'; // converts a human-readable year-month-day to UTC date function strToUtcDate(string) { var parts = string.split('-'); var year = parts[0]; var month = parts[1]; var day = parts[2]; return new Date(Date.UTC(year, month - 1, day, 12, 0, 0)); } shouldBeOpen.forEach(function (string) { var date = strToUtcDate(string); var status = timeNow(date); if (status === STATUS_OPEN) { console.log('opened, as it should on:', date); } else { console.log('closed, BUT IT SHOULD NOT ON:', date); } }); shouldBeClosed.forEach(function (string) { var date = strToUtcDate(string); var status = timeNow(date); if (status === STATUS_CLOSED) { console.log('closed, as it should on:', date); } else { console.log('opened, BUT IT SHOULD NOT ON:', date); } }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM