我在时区“-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参考开始时间吗? –