2016-06-14 99 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” –

相关问题