2017-04-13 35 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'就容易了。此外,使用您輸入的字符串作爲輸入示例,會發生警告,因爲未指定格式。 –