如何在基于 rest 的 API 函数中限制操作时间?



我有一个在 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 点在您的时区中不是星期日。

相关内容

  • 没有找到相关文章

最新更新