2017-04-13 37 views
0

我有以下功能,将30个工作日添加到日期。我通过UTC,但输出给我eastern daylight time我能做些什么来获得只有UTC出这个功能?我试过moment(tmpDate).utc(),但似乎没有任何工作。任何帮助将是伟大的,谢谢!moment.js将东部夏令时转换为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); 
+0

你正在将字符串转换为正常日期... not utc date – charlietfl

+0

我真的没有太多的想法我在这里做什么。我现在很困惑。我怎么能把它变成一个utc日期? –

+0

阅读文档...有一个UTC部分https://momentjs.com/docs/#/parsing/utc/ – charlietfl

回答

2

正如Charlie指出的那样,您正在创建一个本地日期。当下,默认情况下会创建本地日期。

所以一对夫妇的小改变你的函数

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日期上调用toSOString来获取日期的UTC表示形式。

var tmp = addBusinessDays("Tue Apr 04 2017 00:00:00 GMT+0000 (UTC)", 30); 
console.log(tmp.toISOString()); 
+0

我还补充说,如果你想要一个字符串表示,那么只需从时刻对象中调用'.toISOString'或'format'就容易了。此外,使用您输入的字符串作为输入示例,会发生警告,因为未指定格式。 –