Javascript未正确使用day in Date()构造函数
我正在开发一个API,用户可以在该API中请求给定年份和月份的事务。API看起来像Javascript未正确使用day in Date()构造函数,javascript,date,express,momentjs,Javascript,Date,Express,Momentjs,我正在开发一个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).a
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
操作日期
当我点击这个api时,我询问用户m
、2017年和10月10的事务(这就是为什么我在上面的实现中执行month-1
)
我在控制台中得到的是
{ 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);
而不是30
。这里出了什么问题?这是时区的问题。您可以做的是:
let start_date = new Date(year, --month);
start_date.setUTCDate(1);
JavaScript Date()使用客户端本地时区。为了获得一致的结果,JavaScript Date()使用utc方法帮助根据GMT世界标准时间标准化日期。检查
或者,您也可以执行以下操作:
let start_date = new Date(Date.UTC(year, --month, 1));
这看起来确实是一个时区问题
在客户端中,您可以使用Date.prototype.getTimeZoneOffset()
,然后将其添加到日期中。
但是你必须在你的url中添加一些时间参数
哦,时区;虽然你是个冷酷的情妇。可能是因为你用GMT指定了时间,但控制台的输出在不同的时区。这表明你的时区是GMT+13?哦,等等。。。或者格林尼治标准时间+12,从10月1日起的夏季时间?您可以添加参考资料以支持您的陈述吗?谢谢,但您应该在回答中添加以下内容:)不,谢谢。我应该那样做的。谢谢你指出这一点。:)