2016-06-14 43 views
1

我在時區「-07:00」有這個列表,我想將它們轉換爲「+05:00」。將時間戳轉換爲JavaScript中的不同時區

"hours": [ 
    { 
     "from": "11:00", 
     "to": "21:00", 
     "dayOfWeek": "MONDAY" 
    }, 
    { 
     "from": "11:00", 
     "to": "21:00", 
     "dayOfWeek": "TUESDAY" 
    }, 
    { 
     "from": "11:00", 
     "to": "21:00", 
     "dayOfWeek": "WEDNESDAY" 
    }, 
    { 
     "from": "11:00", 
     "to": "21:00", 
     "dayOfWeek": "THURSDAY" 
    }, 
    { 
     "from": "11:00", 
     "to": "21:00", 
     "dayOfWeek": "FRIDAY" 
    } 
    ] 

如何使用類似moment.js這樣的庫有效地做到這一點?我已經研究過一種方法,但並不符合標準。

function formatDates(hoursList, shopDate, userDate){ 
    var moment = require('moment'); 
    var selectedDateText = ""; 
    var convertedDateList = []; 

    for (var x = 0; x < hoursList.length; x++) { 
     var fromDate = shopDate.clone(); 
     var fromMoment = moment(fromDate.format(), "YYYY-MM-DD HH:mm Z"); 
     var fromTime = fromMoment.utcOffset(userDate.utcOffset()); 
     fromTime.hours(parseInt(hoursList[x].from.split(":")[0])); 
     fromTime.minutes(parseInt(hoursList[x].from.split(":")[1])); 
     fromTime.seconds(0); 
     fromTime.milliseconds(0); 
     console.log(fromTime.format()); 

     var toDate = shopDate.clone(); 
     var toMoment = moment(toDate.format(), "YYYY-MM-DD HH:mm Z"); 
     var toTime = toMoment.utcOffset(userDate.utcOffset()); 
     toTime.hours(parseInt(hoursList[x].to.split(":")[0])); 
     toTime.minutes(parseInt(hoursList[x].to.split(":")[1])); 
     toTime.seconds(0); 
     toTime.milliseconds(0); 
     console.log(toTime.format()); 

     var initialDay = { 
      "from": "", 
      "to": "", 
      "dayOfWeek": "" 
     }; 
     initialDay.dayOfWeek = fromTime.format("dddd").toUpperCase(); 
     initialDay.from = fromTime.format("HH:mm"); 

     if (toTime.format("DDD") != fromTime.format("DDD")) { 
      var secondaryDay = { 
       "from": "", 
       "to": "", 
       "dayOfWeek": "" 
      }; 
      initialDay.to = "24:00"; 

      secondaryDay.dayOfWeek = toTime.format("dddd").toUpperCase(); 
      secondaryDay.from = "00:00"; 
      secondaryDay.to = toTime.format("HH:mm"); 

      convertedDateList.push(secondaryDay); 
     } else { 
      initialDay.to = toTime.format("HH:mm"); 
     } 

     convertedDateList.push(initialDay); 
    } 
    console.log(convertedDateList); 
    return selectedDateText; 
} 

主要問題是,轉換時的某些時間戳將在2天內完成。因此,代碼中的第一天和第二天。例如:當它大約6小時並且分成兩部分時,應該在星期一晚上9點到12點以及星期二上午12點到凌晨3點之間加入。而當這個時間段全部爲7天和幾天時間的情況下,甚至在上午12點 - 凌晨3點和晚上9點到12點之間的轉換時間之後,這更加棘手。

如何正確解決這個問題?

謝謝。

+0

Yikes!我很抱歉,你有這樣混亂的輸入,沒有時區。哎喲。真是一團糟。請問,'dayOfWeek'指的是什麼?開始時間還是結束時間?你能改變輸入格式嗎? (因爲這會讓你的問題消失。) –

+0

@RayToal基本上就像是一家商店的營業時間。 「dayOfWeek」表示它開放的那一天。有些商店只在特定的日子開放。 –

+0

明白了 - 所以這些都是當地時間。你可以使用dayOfWeek參考開始時間嗎? –

回答

1

對於與時區相關的內容Moment使模塊依賴於moment.js - 請查找文檔here

+0

我沒有得到區域字符串。只是偏移值。例如:「-07:00」 –

相關問題