我在時區「-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點之間的轉換時間之後,這更加棘手。
如何正確解決這個問題?
謝謝。
Yikes!我很抱歉,你有這樣混亂的輸入,沒有時區。哎喲。真是一團糟。請問,'dayOfWeek'指的是什麼?開始時間還是結束時間?你能改變輸入格式嗎? (因爲這會讓你的問題消失。) –
@RayToal基本上就像是一家商店的營業時間。 「dayOfWeek」表示它開放的那一天。有些商店只在特定的日子開放。 –
明白了 - 所以這些都是當地時間。你可以使用dayOfWeek參考開始時間嗎? –