JSON Scraping - Преобразование военного времени в стандартное время с помощью Javascript - PullRequest
5 голосов
/ 28 декабря 2011

Я собираю данные JSON из URL.Время военное, и мне было интересно, есть ли способ, когда я получаю данные на стороне клиента, чтобы преобразовать его в стандартное время.

Вот JSON:

[
  {
    SaturdayClose: "21:00",
    SaturdayOpen: "10:00",
    SundayClose: "12:00",
    SundayOpen: "18:00",
    WeekdayClose: "21:00",
    WeekdayOpen: "10:00"
  }
]

Вотmy index.html:

    <p>
        Sun: ${ SundayOpen }a - ${ SundayClose }p Mon - Sat: ${ SaturdayOpen }a ${ SaturdayClose }p
    </p>

Возвращает этот тип уродства:

Солнце: 18: 00а - 12: 00 пн. - сб .: 10: 00а 21: 00п

Я бы предпочел вернуть это:

Солнце: 6: 00а - 12: пн. - Сб .: 10: 00а - 9: 00p

Ответы [ 5 ]

4 голосов
/ 28 декабря 2011

Использование скрипта даты будет работать, конечно. Если все, что вам нужно, - это конвертировать 24-часовые часы в 12-часовой, вы можете просто вычесть время и добавить период, как указано.

EDIT

Я добавил два раза в качестве теста, 00:30, который должен быть 12:30 am, и 12:15, который должен быть 12:15 pm. См. Новое редактирование ниже.

var times = {
    SaturdayClose: "21:00",
    SaturdayOpen: "10:00",
    SundayClose: "12:00",
    SundayOpen: "18:00",
    WeekdayOpen: "10:00",
    WeekdayClose: "21:00",
    WeekendOpen: "12:15",
    WeekendClose: "00:30"
};

console.log(times);

for (var time in times) {
    var parts = times[time].split(':'),
        hour = parts[0],
        minutes = parts[1];

    if (hour > 12) {
        times[time] = (hour - 12) + ':' + minutes + ' pm';
    } else if (hour == 0) {
        times[time] = 12 + ':' + minutes + ' am';
    } else if (hour == 12) {
        times[time] += ' pm';
    } else {
        times[time] += ' am';
    }
}

console.log(times);

http://jsfiddle.net/tqXCL/3/

Что дает вам следующее после преобразования:

SaturdayClose "9:00 pm" 
SaturdayOpen  "10:00 am"    
SundayClose   "12:00 pm"    
SundayOpen    "6:00 pm" 
WeekdayClose  "9:00 pm" 
WeekdayOpen   "10:00 am"    
WeekendClose  "12:30 am"    
WeekendOpen   "12:15 pm"
3 голосов
/ 28 декабря 2011

Если вы хотите использовать html, а не json, вы можете сделать это.

dateEl.innerHTML=dateEl.innerHTML.replace(/(\d\d)(:\d\d[ap])/g,function(m,hour,suffix) {
  return (+hour+11)%12+1+suffix;
});

Обратите внимание, что предполагается, что вы установили dateEl для соответствующего элемента, и этот элемент не содержит других случаев, которые вы не хотите преобразовывать.

1 голос
/ 28 декабря 2011

ДЕМО

window.onload=function() {

  var re=/(\d{2}:\d{2}[ap])/gi
  var times = document.getElementById('times').innerHTML;
  var mil = times.match(re);
  for (var i=0;i<mil.length;i++) {
    var parts = mil[i].split(":");
    var hours = parseInt(parts[0],10);
    if (hours > 12) parts[0]=hours-=12;
    else if (hours==0) parts[0]=12
    times=times.replace(mil[i],parts.join(":"))
  }
  document.getElementById('times').innerHTML = times;
}
1 голос
/ 28 декабря 2011

Посмотрите как date.js .Он полон удобных функций преобразования даты.

0 голосов
/ 28 декабря 2011

«Военное время» (около 24 часов) легко конвертируется в 12 часов с помощью простого модуля 12.

Пример JSFiddle:

var obj = {
    SaturdayClose: "21:00",
    SaturdayOpen: "10:00",
    SundayClose: "12:00",
    SundayOpen: "18:00",
    WeekdayClose: "21:00",
    WeekdayOpen: "10:00"
}, prop, $output = $('#output'), time, x, meridiem;

for (prop in obj) {
    if (obj.hasOwnProperty(prop)) {
        x =+obj[prop].substr(0, 2);

        if (x > 12) {
            x = x % 12;
            meridiem = "pm";
        } else {
            meridiem = "am";
        }

        time = x + ":00" + meridiem;

        $output.append("<li>" + prop + " " + time + "</li>");
    }
}
...