2011-08-29 14 views
5

Tengo un campo de tipo de fecha, 2011-07-20 como un ejemplo de formato, que necesito convertir a UTC para usar en javascript. Sé que puedo usar Date.UTC en javascript pero luego el mes está desactivado en uno y no toma los guiones como delimitadores.Rails 3 Fecha a UTC para usar en javascript

¿Cómo se convierte el formato de fecha de los rieles predeterminados a UTC?

Respuesta

13

En un controlador

@time = Time.parse('2011-07-20').utc.to_i*1000 

En una vista

<script type="text/javascript"> 
    var date = new Date(<%= @time %>); 
    alert(date); 
</script> 
+1

Estaba cometiendo un error porque no me pasó una secuencia para analizar. Estaba abandonando mi campo de fecha como en Time.parse (date_var) .utc.to_i y recibí un error. Parece bastante extraño que tengamos que convertir una variable de fecha en una cadena para obtener UTC. Probablemente no sea el más eficiente, pero funciona. Gracias... – Xaxum

1

Suponga que tiene una cadena '2011-07-20', el siguiente debería ayudar

Time.parse('2011-07-20').utc 
4

Sólo para agregue otra opción (derivada de la respuesta de kreeks):

Puede mono-parchear la clase de tiempo en un inicializador para agregar un método to_js:

class ::Time 
    def to_js 
    self.utc.to_i*1000 
    end 
end 

y luego utilizar esta función en su código JavaScript:

var date = new Date(<%= Time.parse('2011-07-20').to_js %>); 
console.log(date); 

Espero que esto ayude.

1

Las respuestas anteriores no funcionaron para mí ya que descubrí que estaba teniendo un desajuste con las zonas horarias. Para la siguiente fecha en javascript (note está indexada cero en js)

var date1 = Date.UTC(2014, 0, 1) 

para obtener el valor idéntico en Rubí Hice esto: -

t = Date.new(2014,01,01).to_time 
t += t.utc_offset 
@timestamp1 = (t.to_i * 1000) 

Luego de verificar en js

var timestamp1 = <%= @timestamp1 %>; 
var timestamp2 = Date.UTC(2014, 0, 1); 
var date1 = new Date(timestamp1); 
var date2 = new Date(timestamp2); 
$("#div1").text("Ruby => " + date1.toUTCString() + ', Tz offset =>' + date1.getTimezoneOffset()); 
$("#div2").text("JS => " + date2.toUTCString() + ', Tz offset =>' + date2.getTimezoneOffset());