2011-12-28 16 views
5

Estoy recortando datos JSON de una url. La hora es hora militar y me preguntaba si hay una forma en que recupere en el lado del cliente para convertirla a la hora estándar.JSON Scraping - Convierta el tiempo militar a la hora estándar a través de Javascript

Aquí es el JSON:

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

Aquí es mi index.html:

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

Esto devuelve este tipo de fealdad:

sol: 18: 00a - 12: 00p Lun - Sáb: 10: 00a 21: 00p

Preferiría devolver esto:

Dom: 6: 00a - 12: p Lun - Sáb .: 10: 00a - 9: 00p

+0

búsqueda de Google para la fecha del formato js en lugar de convertir ;-) –

+0

cuando busco mis resultados son principalmente para hacer con C#. ¿Esto solo es posible por el lado del servidor? Si tienes un enlace, por favor hazlo. Gracias. –

+0

lo siento, una solución js podría ser [este] (http://stackoverflow.com/a/8622009/1114171) o [este] (http://stackoverflow.com/a/1056730/1114171) –

Respuesta

1

Echa un vistazo a date.js. Está lleno de funciones de conversión de fecha útiles.

+3

Completamente overkill – mplungjan

+0

Supongo que jquery es "completamente exagerado" también a menos que alguien escriba su código por usted. –

+0

Sí. Ver mi respuesta No puedes hacer eso más pequeño con jQuery ni date.js – mplungjan

1

DEMO

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; 
} 
+0

Eso no funciona correctamente la medianoche: http://jsfiddle.net/ZEAqZ/2/ –

+0

Ahora sí ... – mplungjan

+0

El "|" no se usa en una clase de personaje; se está interpretando literalmente en este momento. –

4

El uso de un script fecha trabajará por supuesto. Si todo lo que necesita es convertir de 24 hour clock a 12 horas, simplemente puede restar la hora y agregar el período como se indica.

EDITAR

I añadió dos veces como una prueba, 00:30, que debe ser 12:30 am, y 12:15, que debe ser 12:15 pm. Vea la nueva edición a continuación.

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/

que le da el siguiente después de la conversión:

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" 
0

"tiempo militar" (también conocido como 24 horas de tiempo) se convierte fácilmente en el tiempo de 12 horas a través de un simple módulo 12.

JSFiddle example:

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>"); 
    } 
} 
+0

Eso no maneja '00: 30' y' 12: 15' correctamente: http://jsfiddle.net/2qxPa/1/ Tampoco está agregando el período, por lo que es ambiguo periodo al que se refieren los tiempos. –

+0

Buena captura. Eso se me olvidó. He actualizado mi respuesta con una corrección. –

3

Si desea utilizar el html, no el json, puede hacerlo.

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

Tenga en cuenta que esto supone que haya establecido dateEl al elemento apropiado, y que ese elemento no contiene otras ocasiones que no desea convertir.

+0

enfoque interesante ... Un poco demasiado escueto para mostrar a un principiante pero inteligente. Tampoco maneja la medianoche http://jsfiddle.net/mplungjan/tNLt7/ – mplungjan

+0

Bueno, ahora me siento como un idiota. Sabía que manejaba las 12:00 y asumí que funcionaría a medianoche cuando leyera el comentario en tu publicación. Gracias por señalar eso - corregido (con un personaje :)). –

+0

En realidad dos ... oops. –

Cuestiones relacionadas