moment.js将东部夏令时转换为utc?

时间:2017-04-13 19:49:43

标签: javascript timezone timestamp momentjs

我有以下功能,可以在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);

1 个答案:

答案 0 :(得分:2)

正如查理指出的那样,你正在创建一个本地约会。默认情况下,时刻会创建本地日期。

对你的功能进行一些小改动

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());