2010-10-22 12 views
5

Tengo la necesidad de capturar una hora y una zona horaria de usuarios de una aplicación de carriles 2.3.8, pero no he podido pensar en una solución limpia para crear y analizar las seleccionestime_select con 12 horas de hora y zona horaria en Ruby on Rails

Lo ideal sería tener unos menús desplegables para lo siguiente:

  • hora (1-12)
  • minuto (0-59)
  • AM/PM
  • zona horaria

¿Hay una joya/complemento que cumpla lo que estoy buscando? ¿Necesitaré almacenar tanto la hora como la zona horaria en la base de datos? ¿Cuál es la mejor estrategia para el almacenamiento?

Eventualmente tendré que escupir estos valores en UTC, pero un usuario debería poder regresar y revisar la hora en el huso horario correcto.

+0

¿Alguna vez encontrar la manera de hacer una hora 12 con AM/PM elemento select? – Andrew

+0

IIRC, había un parche de 12 horas para los monos. No es la solución más limpia, pero funcionó dentro de mi fecha límite. – jessecurry

Respuesta

11

Puede obtener zona horaria selecciona con los métodos apropiados:

Del mismo modo, hay date_select para las fechas.

almacenamiento:

Si la zona horaria es específica para el usuario y no cambia, entonces almacenar su zona horaria en su registro de usuario y configurarlo cuando se carga el current_user. Rails convertirá las horas en/desde UTC y siempre almacenará el UTC en la base de datos y realizará automáticamente la conversión a esa zona horaria predeterminada (¡incluido el horario de verano!). La manera más fácil de hacerlo.

use_zone(zone) le permite anular la zona predeterminada para un bloque, por lo que puede aceptar un valor de formulario y establecerlo con esa función y establecer su valor en ese bloque.

ACTUALIZACIÓN: escribí algunos Rails timezone examples como entrada de blog.

+0

Vi los métodos para crear un selector de zona horaria, pero ese selector no está vinculado a un objeto Time. ¿Esto es algo vinculante que tendré que hacer yo mismo? – jessecurry

+0

Una zona horaria no estará ligada a un objeto Time. Presumiblemente, está utilizando 'form_for @ thing' en lo que está tratando de capturar la fecha/hora/zona. – wesgarrison

1

que yo personalmente utilizado jQuery para cambiar sólo la pantalla:

ampm = ["12 AM","01 AM","02 AM","03 AM","04 AM","05 AM","06 AM","07 AM","08 AM","09 AM","10 AM","11 AM","12 PM","01 PM","12 PM","01 PM","02 PM","01 PM","02 PM","03 PM","04 PM","05 PM","06 PM","07 PM","08 PM","09 PM","10 PM","11 PM"] 
    j("#game_start_time_4i option").each(function(index,value){ 
     j(value).html(ampm[index]); 
    }); 

Rieles:

<%= datetime_select('game', 'start_time') %> 
Cuestiones relacionadas