Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript未正确使用day in Date()构造函数_Javascript_Date_Express_Momentjs - Fatal编程技术网

Javascript未正确使用day in Date()构造函数

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

我正在开发一个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
操作日期

当我点击这个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日起的夏季时间?您可以添加参考资料以支持您的陈述吗?谢谢,但您应该在回答中添加以下内容:)不,谢谢。我应该那样做的。谢谢你指出这一点。:)