0

我为我们在 AWS Lambda 上运行的网络商店提供了一个 API 集成,以根据客户地址返回实时交付报价,然后在发票完成(已支付)时创建交付订单给作为服务提供商的第三方交付。

我能够为周一至周六添加时间限制,但周日有不同的时间并且不工作。以下是相关代码:

    '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) {

        }

    }
4

1 回答 1

1

NOT使用逻辑时要非常小心。

您“正常”的日子里,商店从凌晨 3 点到下午 4 点关门。(是的,下午 4 点。那是因为您只检查时间,所以下午 3:59 仍然是 3 的“小时”,所以它将被关闭。)

周日,商店从午夜到下午 4:59 以及晚上 10 点到午夜关闭。

看看这一行:

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

让我们选择凌晨 2 点的时间。它相当于:

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

这等于 TRUE,因此商店已关闭。

凌晨 4 点相同:if (!(FALSE) || !(FALSE))也等于TRUE

在这些逻辑语句中,您可能需要一个AND而不是一个。OR

我还建议您UTC时间转换为“本地”时间,这将使您更容易编写逻辑。这将避免 UTC 星期日实际上与您的“本地”星期日不一致的错误。例如,如果您是 UTC-6,则 UTC Sunday 凌晨 2 点在您所在的时区不是周日。

于 2020-02-11T03:03:05.807 回答