我正在开发一个API,用户可以在该API中询问特定年份和月份的交易。 API看起来像
routes.get('/transactions/:member_id/:year/:month', (req, res) => {
let {member_id, year, month} = req.params;
let start_date = new Date(year, month - 1, 1);
let end_date = moment(start_date).add(1, 'months');
console.log({start_date, end_date});
res.send({start_date, end_date})
});
我使用ExpressJS
来构建API,使用momentjs
来操作日期。
当我以http://localhost:8080/transactions/m/2017/10点击此API时,我会询问用户m
,年2017
和月10
的交易,这是10月的原因(这就是我{{} 1}}在我上面的实现中)。
我在month - 1
取回的内容是
console
我感到困惑,因为该月的开始日已被硬编码为{ start_date: 2017-09-30T11:00:00.000Z,
end_date: moment("2017-11-01T00:00:00.000") }
1
而不是let start_date = new Date(year, month - 1, 1);
。这里出了什么问题?
答案 0 :(得分:1)
这是时区的问题。你能做的是:
let start_date = new Date(year, --month);
start_date.setUTCDate(1);
JavaScript Date()使用客户端本地时区。为了获得一致的结果,JavaScript Date()具有utc方法来帮助基于GMT世界标准时间标准化日期。查看MDN's JavaScript Date Reference
或者,你也可以这样做:
let start_date = new Date(Date.UTC(year, --month, 1));
答案 1 :(得分:0)
这看起来像是时区问题。
在您的客户端中,您可以使用Date.prototype.getTimeZoneOffset()
,然后将其添加到您的日期。
但是你必须在你的网址上添加一些时间参数。
哦时区;虽然艺术是一个冷酷的情妇。