ruby-on-rails - example - rails postgresql
fechas de rieles con json (7)
Estoy implementando una aplicación de Facebook y usando AJAX / JSON .
Sin embargo, las estructuras JSON que se devuelven tienen este formato 2010-05-30T06:14:00Z
.
Game.all.to_json
a Game.all.to_json
en la acción del controlador.
¿Cómo puedo convertirlos a un formato de fecha normal?
¿Es más fácil hacerlo desde el lado del servidor o del lado del cliente utilizando fbjs ? Hay muchos errores con fbjs .
Así que preferiría usar una solución del Server side
del Server side
usando ( Active Records
). Como convertir los datos antes de enviar las estructuras JSON
.
Con la zona horaria trabajando en todos los navegadores principales y ie7 +:
class ActiveSupport::TimeWithZone
def as_json(options = {})
strftime(''%Y/%m/%d %H:%M:%S %z'')
end
end
Definitivamente más fácil de hacer por el lado del servidor. Puede hacer un gsubgegex para ponerlo en el formato que desee, o un time.strftime, y luego generar su json con esa cadena.
La forma en que agregué mi propio formato personalizado al JSON que estaba devolviendo fue agregar un parche de mono a la clase ActiveSupport TimeWithZone.
Agregue un archivo en la carpeta config / initializers con los siguientes contenidos:
class ActiveSupport::TimeWithZone
def as_json(options = {})
strftime(''%Y-%m-%d %H:%M:%S'')
end
end
Puede anular el método as_json en su modelo como:
class Game
def as_json(options = {})
super.merge(time: time.strftime(''%d.%m.%Y %H:%M:%S''))
end
end
Rails ahora tiene el método .as_json
en el objeto DateTime
. La vida se hizo más fácil.
Si desea hacer esto con javascript en el lado del cliente, puede analizar fechas individuales con algo como esto:
prettyDate = function(dateString) {
var day, formatted, jsDate, month;
jsDate = new Date(dateString);
day = jsDate.getMonth() + 1 < 10 ? "0" + (jsDate.getMonth() + 1) : "" + (jsDate.getMonth() + 1);
month = jsDate.getDate() < 10 ? "0" + (jsDate.getDate()) : "" + (jsDate.getDate());
formatted = "" + day + "/" + month + "/" + (jsDate.getFullYear());
return formatted;
};
Necesitará un código adicional si necesita formatear la hora, por supuesto.
Time.parse < datetime >
simples.