简体   繁体   English

检查特定日期的时间功能

[英]Time function that checks for certain days

I have the following time function that I use to output if the business is open or closed. 我有以下时间函数,用于在业务打开或关闭时输出。 The way I have it coded works fine for normal business weeks. 我的编码方式在正常的工作周内效果很好。 What I am wanting to do is program it for holidays, such as Christmas, 4th of July, etc that are always on the same day, so the output shows we are closed. 我想要做的是将其编程为假期,例如圣诞节,7月4日等总是在同一天的假期,因此输出显示我们已关闭。

How would I program in the fixed holidays? 固定假期我将如何编程?

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);

I've modified your original function and created an initial version , that handles a custom, easily "configurable", human-readable list of specific holidays. 我已经修改了您的原始功能,并创建了一个初始版本 ,该初始版本可处理一个自定义的,易于“配置”的,人类可读的特定假期列表。

 /** * 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