我有一个在 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) {
}
}
使用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 星期日凌晨 2 点在您的时区中不是星期日。