我有以下函数,可以将 30 个工作日添加到日期。我正在传入UTC
但输出给了我eastern daylight time
我该怎么做才能从这个函数中只获得 UTC?我已经尝试过moment(tmpDate).utc()
但似乎没有任何效果。任何帮助都会很棒,谢谢!
function addBusinessDays(date, daysToAdd) {
var cnt = 0;
var tmpDate = moment(date);
while (cnt < daysToAdd) {
tmpDate = tmpDate.add('days', 1);
if (tmpDate.weekday() != moment().day("Sunday").weekday() && tmpDate.weekday() != moment().day("Saturday").weekday()) {
cnt = cnt + 1;
}
}
return tmpDate._d;
}
var tmp = addBusinessDays("Tue Apr 04 2017 00:00:00 GMT+0000 (UTC)", 30);
正如查理指出的那样,您正在创建一个本地日期。时刻,默认情况下会创建本地日期。
所以对你的函数做了一些小的改变
function addBusinessDays(date, daysToAdd) {
var cnt = 0;
var tmpDate = moment.utc(date); // call utc to create a UTC date
while (cnt < daysToAdd) {
tmpDate = tmpDate.add('days', 1);
if (tmpDate.weekday() != moment().day("Sunday").weekday() && tmpDate.weekday() != moment().day("Saturday").weekday()) {
cnt = cnt + 1;
}
}
return tmpDate.toDate(); // call toDate() to get the JS date out of Moment. Do not use internal private properties.
}
现在,当你调用它时,你将得到一个JS日期对象。默认情况下,它将是本地的,这就是它们的工作方式。但是,您可以在 JS 日期上调用 ISOString 以获取日期的 UTC 表示形式。
var tmp = addBusinessDays("Tue Apr 04 2017 00:00:00 GMT+0000 (UTC)", 30);
console.log(tmp.toISOString());