Как ограничить часы работы в функции API, основанной на отдыхе? - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть интеграция API для нашего интернет-магазина, работающего на AWS Lambda, чтобы возвращать текущие расценки на доставку на основе адреса клиента, а затем создавать заказ на доставку для сторонней доставки в качестве поставщика услуг, когда счет-фактура завершен (оплачен ).

Мне удалось добавить ограничение на время с понедельника по субботу, но в воскресенье другие часы, и он не работает. Вот соответствующий код:

    'use strict'

    /**
     * This function is use to generate qoutes to client 1st warehouse
     */
    exports.handler = function (event, context, callback) {
        console.log('-------------------EVENT OBJECT--------------------------')
        // console.log(event.body.shipping_address)
        console.log(event)
        try {
            const app = require('./app')
            const EventEmitter = require('events').EventEmitter
            const _bus = new EventEmitter()
            let date = new Date()
            if (date.getDay() == 0) {
                if (!(date.getHours() >= 17 && date.getHours() <= 22) || !(date.getHours() < 3)) {
                    callback(null, {
                        message: 'The store is closed'
                    })
                }
            } else {
                if (date.getHours() >= 3 && date.getHours() <= 15) {
                    callback(null, {
                        message: 'The store is closed'
                    })
                }
            }

            let _shipmentReturn = []
            let _shipmentReturnError = []
        }
        catch(e) {

        }

    }

1 Ответ

1 голос
/ 11 февраля 2020

Будьте очень осторожны при использовании NOT logi c.

В ваши «обычные» дни магазин закрыт с 3:00 до 16:00. (Да, 16:00. Это потому, что вы проверяете только часы, поэтому 15:59 по-прежнему «час» из 3, поэтому он будет закрыт.)

В воскресенье магазин закрыт с полуночи до 4: 59 вечера, а также 22:00 до полуночи.

Взгляните на эту строку:

if (!(date.getHours() >= 17 && date.getHours() <= 22) || !(date.getHours() < 3)) {

Давайте выберем время 2 часа ночи. Это равно:

if (!(FALSE) || !(TRUE))

Это равно ИСТИНА, поэтому магазин закрыт.

То же самое для 4 утра: if (!(FALSE) || !(FALSE)) также равно TRUE

Возможно, вы хотите AND вместо OR в этих операторах logi c.

Я бы также рекомендовал вам преобразовать UTC раз в ваше "местное" время , что Вам будет проще написать логи c. Это позволит избежать ошибок, когда UT C Sunday фактически не совпадает с вашим «местным» воскресеньем. Например, если вы используете UT C -6, тогда 2:00 UT C воскресенье - , а не воскресенье в вашем часовом поясе.

...