Javascript getDate()函数在Lambda函数中提前一天返回

时间:2018-02-07 01:22:38

标签: javascript date lambda

我目前在中部时间,是2月6日下午7:19

我的代码中有这行Javascript:

var d = new Date();
var theMonth = d.getMonth() + 1;
var theDay = d.getDate();
var theYear = d.getFullYear();

var formattedStartDate = theYear + "-" + theMonth + "-" + theDay;
console.log(formattedStartDate);

问题是,这实际上是打印

2018-2-7

我正在通过美国东部端点的AWS Lambda运行托管此代码,因此我无法理解为什么它会完全使用错误的日期。可能是什么问题?

2 个答案:

答案 0 :(得分:0)

Moment.js可以为您处理。 https://momentjs.com/

moment(d).utcOffset('-0600')会将时区设置为中心。下面的代码最后有两个console.log语句。第一个在设置时区之前打印日期/时间,第二个在设置时区之后打印日期/时间以显示它有效。我在日期对象中加入了时间,因此您可以看到在一天中的任何时间应用了正确的时区。

作为额外的奖励,moment.js还将简化日期格式。



'use strict';

var moment = require('moment');

exports.handler = (event, context, callback) => {
    
var d = new Date();
var theMonth = d.getMonth() + 1;
var theDay = d.getDate();
var theYear = d.getFullYear();

var formattedStartDate = theYear + "-" + theMonth + "-" + theDay;
console.log(formattedStartDate);

console.log(d);  //prints current datetime before applying timezone
d = moment(d).utcOffset('-0600').format('YYYY-MM-DD HH:mm'); //applies Central timezone
console.log(d);  //prints updated timezone


};




答案 1 :(得分:0)

AWS Lambda将其本地时间设置为UTC,因此getDate()getUTCDate()会产生相同的结果。