Saludos a la comunidad, tengo un problema con las fechas pues quiero
guardar mi fecha en el formato dd/mm/YYYY en mi aplicación estoy
utilizando postgres como controlador de mi BD, la pregunta es la
siguiente cuando reviso mi tabla en postgres la fecha la guarda con el
formato YYYY/mm/dd, ese problema es de la BD? Pues he intentado
configurar de las mil y una forma y nada!!! si el problema es de la BD
disculpen preguntare en un foro de postgres.
Yo de postgres no tengo ni idea, pero en MySQL, el formato YYYY/mm/dd es
el
que viene por defecto. Lo que yo te recomiendo es que introduzcas las
fechas
en ese formato para que la BBDD este contenta(igual esto es una
tonteria) y
luego al sacar el campo fecha lo formatees como quieras con las armas
que te
proporciona rails (que no se cual son, pero buscando un poco en la API o
en
google seguro encuentras).
Un saludo
El 8 de septiembre de 2008 17:18, Juan M. < [email protected]> escribió:
Yo, al igual que Andrés, opino que te conviene más guardar las fechas
con el formato original de la BD y al momento de desplegarla en pantalla
le des el formato correspondiente, de hecho eso es lo que yo estoy
haciendo en mi sistema. Para lograr eso hice un simple helper que puse
en el archivo Application_helper.rb, dentro de la carpeta Helpers.
Este es el codigo de este helper:
def fecha(fecha_a_formatear)
fecha_a_formatear.strftime("%d/%m/%Y")
end
Despues, para mostrar la fecha en pantalla simplemente escribo algo asi
como:
<%= fecha( @tabla.fecha_a_mostrar ) %>
Espero que te sirva de algo
Andrés gutiérrez
escribió:> Yo de postgres no tengo ni idea, pero en MySQL, el formato YYYY/mm/dd
Si quieres guardar las fechas en el formato que tu quieres, siempre
puedes utilizar un campo de tipo string para guardarlas, lo que pasa
es que si algun dia tu proyecto cae en manos de otro desarrollador
puede ser que flipe bastante.
El día 8 de septiembre de 2008 12:18, Juan M. [email protected]
escribió:> Saludos a la comunidad, tengo un problema con las fechas pues quiero
guardar mi fecha en el formato dd/mm/YYYY en mi aplicación estoy
utilizando postgres como controlador de mi BD, la pregunta es la
siguiente cuando reviso mi tabla en postgres la fecha la guarda con el
formato YYYY/mm/dd, ese problema es de la BD? Pues he intentado
configurar de las mil y una forma y nada!!! si el problema es de la BD
disculpen preguntare en un foro de postgres.
Postgres no las guarda ni en formato año mes día, ni en formato
díames año, sino en la forma que a él le parece.
Modificando los seteos de la sesión una vez conectado a postgres con
el cliente que sea, con “SET DATESTYLE” podés ver las fechas en el
formato que necesites.
Despues, para mostrar la fecha en pantalla simplemente escribo algo asi
como:
<%= fecha( @tabla.fecha_a_mostrar ) %>
Existe una forma especÃfica para formatos de fecha en Rails, que
consiste en
agregar los nuestros propios a la constante
ActiveSupport::CoreExtensions::Conversions::DATE_FORMATS
El día 8 de septiembre de 2008 12:59, Francesc E. [email protected]
escribió:> id | title | created_at | updated_at
----±------±---------------------------±---------------------------
1 | Yay | 2008-09-08 15:57:05.24639 | 2008-09-08 15:57:05.24639
Lo que estaba tratando de decir es que no importa la forma en la que
se almacena, sino que independientemente de lo que haga postgres,
siempre el cliente puede determinar en qué forma se ven las fechas …
probá lo siguiente …
set datestyle = sql,DMY; select current_timestamp;
SET
now
08/09/2008 14:24:33.899 ART
(1 row)
set datestyle = iso; select current_timestamp;
SET
now
Yo opino que lo guarde la bd como le plasca, basta con poner
strftime("%d/%m/%Y") y ya estaspues si pones
algo = ObjetoAR.new
algo.created_at = Date.today
algo.save
luego algo.created_at.strftime(%d/%m/%Y") y ya lo tienes como quieres
hechale una ojeada al strtime tanto para date como para Time puedes
formatearlo de varias formas como lo necesites
El 8 de septiembre de 2008 10:59, Francesc E. < [email protected]> escribió:
Primero disculpe que no habÃa respondido si ya me funciona o no!!!
ante todo miles de gracias por todas sus ayudas, mi tardanza en
responder es por la siguiente causa:
1.Estuve configurando el postgres como lo menciona el compañero
Francesc y Silvio lo que hice fue lo siguiente:
En el archivo postgresql.conf active la lÃnea datestyle = ‘SQL, DMY’,
con ese formato pues por lo que leÃa guarda la fecha en el formato
dd/mm/yyyy, luego en la consoloa de postgres hice el siguiente comando:
SET DATESTYLE TO ‘SQL, DMY’; para ver si hizo el cambio el siguiente
comando: SHOW DATESTYLE; y me dio como resultado:
DateStyle
1.Si mi fecha esta llegando bien al controlador, tengo que hacer lo que
dice alguno de los compañeros, de darle otro formato para que mi bbddd
sea feliz?
2.El formato tendrÃa que hacerlo tanto para guardarlo como para
mostrarlo?
Por ejemplo haciendo la prueba en mi controlador hice lo siguiente:
@fecha= params[:alumno][:fnacimiento]
puts @fecha
efectivamente puedo ver la fecha, si hacemos el ejemplo con esta fecha
(31/12/1972) @fecha la guarda no hay problema en eso, ahora bien si lo
unico que quiero es estando en el controlador cambiar mi formato para
que se pueda guardar en la bbdd trate de hacer esto:
Siento que si puedo hacer lo mismo en el controlador soluciono mi
problema, pues lo que necesito es que cuando llegue la fecha al
controlador le cambio el formato con strftime("%Y/%m/%d") para que se
guarde en mi bbddd. El problema son lo errores que mencione
anteriormente que ni to_date ni
strftime("%Y/%m/%d") me estan funcionando en el controlador
Para atacar bien este problema has de distinguir muy bien cuando tienes
Una cadena Ruby arbitraria que podria tener pinta de fecha
Un objeto Ruby de tipo Date
Si tienes un objeto Date estas al cabo de la calle, eso es una fecha
bien formada por definicion.
Lo que tienes que hacer es pinchar en la generacion de vistas y
proceso de parametros. Porque en params TODO son cadenas. Una vez
asignes una fecha al modelo hacia la base de datos va solo. Y cuando
leas de base de datos lo que tienes es siempre un objeto Date. Solo
has de preocuparte de vistas y proceso de parametros.
Como tienes cadenas, al procesar un form debes intentar sacar un Date
de ahi y validar el resultado. A la hora de escribir la fecha en una
vista (o en un text field como valor por defecto) has de usar #strftime de algun modo.
Todo eso es un poco manual y de ahi el generador que envie.
Te explico mi aproximacion actual a fechas y numeros por si te sirve.
La base de datos y los getters/setters de la fechas no los toco. Tengo
en un initializer este generador:
ActiveRecord::Base.class_eval do
def self.l10n_date(*syms)
syms.each do |s|
class_eval <<-EOS
def #{s}_as_string
#{s}.strftime("%d/%m/%Y") rescue ‘’
end
def #{s}_as_string=(v)
if date = MyAppUtils.parse_date(v)
self.#{s} = date
else
self.errors.add(:#{s}, "fecha inválida")
end
end
EOS
end
end
...
end
De manera que un modelo dice:
class Project < AR::Base
l10n_date :deal_date
end
lo que genera metodos #deal_date_as_string y #deal_date_as_string=. En
las vistas solo uso campos *_as_string para fechas y numeros y todo lo
demas va automatico, mass-assignment, R/W a base de datos etc. Se
podrian autodescubrir las fechas pero suelo tener pocas y ya me vale
asi.
Si hace falta, pinchando en ese unico punto tienes localizacion segun
la cuenta, en lugar de hard-codear los formatos/parsers como estan en
el ejemplo de arriba los parametrizas de alguna manera.
Bueno amigos les informo que ya pude solucionar mi problema, pero
antes de mencionar como lo hice le doy gracias todos los que me ayudaron
con mi duda, recapitulo un poco. En mi aplicación un usuario puede
escoger de un calendario X fecha en el formato dd/mm/yyy y esa fecha
deberia guardarse en la bbdd cosa que no pasaba, la fecha esta llegando
bien a mi controlador de la forma siguiente:
@fecha=params[:alumno][:fnacimiento], pero como dice el compañero Xavier
todo lo que esta con paramas son cadenas hice lo siguiente para poder
cambiar la cadena a una de tipo fecha, esto fue lo que hice:
Y listo!!! funciona a la perfección y por la validación no me preocupo
pues el plugin del calendario me da la fecha exactamente como quiero,
ejemplo una fecha : 1/9/2008 no funcionaria para lo que hago, pero
modifique el formato de la fecha del plugin para que sea 01/09/2008 y de
esa manera si todo funciona!!! Gracias a todos.
PD: Si tengo un error por favor notificar. Gracias nuevamente.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.