Formatowanie daty

No więc problem jest następujący

w bazie data wyglada tak:

04.01.2009 00:01:42.144292

w rails wyswietla sie w koncu po kilku roznych probach tak:

2009-04-01 02:01:42 +0200

ale jak dam

created_at.strftime("%B")

to daje April zamiast January

czyli dla niego dzien to miesiac, czyli amerykanski format daty

gdzie ustawic by %B wzracalo odpowiednia wartosc?

Moje pytanie jest aż tak głupie czy po prostu nie zna nikt odpowiedzi? bo mnie juz ten ruby wkurza, proste niby rzeczy i co chwila problemy

bedesie chyba musial posilkowac php

przez system(“funkcja.php”)

bo taka konstrukcja w railsach jest?

Jesteś pewny, że w bazie jest January zamiast April ?
Sprawdź bezpośrednio w bazie korzystając z odpowiedniej funkcji która zwraca miesiąc (z jakiej bazy korzystasz ?).

Np. dla Mysql możesz użyć:

[code=sql]select date_format(now(), “%b”);

±-------------------------+
| date_format(now(), “%b”) |
±-------------------------+
| Jan |
±-------------------------+[/code]
czy w Twoim przypadku:

select date_format(created_at, "%b") where id = szukane_id;

%B w strftime to przełącznik wyświetlania czasu - tego się nie ustawia :wink:

Dlaczego chcesz pisać w Rubim skoro Cię wkurza, zmuszają w pracy ? Może lepiej zostać przy PHP jeśli nie musisz pisać w Rubim ? (BTW. przykład z system(“funkcja.php”) mnie rozbawił :> )

[quote=gotar]No więc problem jest następujący

w bazie data wyglada tak:

04.01.2009 00:01:42.144292[/quote]
Jaka baza?

[quote=gotar]w rails wyswietla sie w koncu po kilku roznych probach tak:

2009-04-01 02:01:42 +0200[/quote]
Co to za boje? Podaj kod.

Moze cos pomoze: http://rails-i18n.org/wiki

i http://apidock.com/rails/ActiveSupport/TimeWithZone/to_s

ja bym to zrobil tak do bazy zapisywal daty w postaci : miesciac/dzien/rok godzina:minuta
potem uzyl bym parsedate i stworzył obiekt klasy Time to by bylo moje rozwiazanie

Badzok, z całym szacunkiem, ale mam nadzieję że nikt nie potraktuje poważnie tego pomysłu i będą ludzie jednak używali natywnych bazodanowych typów.

sorki ze mnie ponioslo to przez wkurw na moj zasub wiedzy o ror, to jak na razie tylko projekt na zaliczenie, na powaznie, dla kasy tylko php

baza to postgres :

gotar@gotar ~ $ postgres --version
postgres (PostgreSQL) 8.2.7

dostaje cos takiego:
blog=# SELECT created_at from posts;
created_at

04.01.2009 00:01:42.144292
(1 row)

czyli dzis
i wie ze 4 to dzien:

blog=# SELECT EXTRACT(DAY FROM (SELECT created_at from posts limit 1));
date_part

     4

(1 row)

no i teraz rails

a w Rails mam

<%= post.created_at %> - 2009-04-01 02:01:42 +0200

<%= post.created_at.day %> - 1

czyli zle powinno byc 4

nie mowiac juz ze dodal 2h ale to wiem co pewnie przez to

ENV[“TZ”] = “Europe/Warsaw”
ENV[“LANG”] = “pl_PL”
ENV[“LC_ALL”] = “pl_PL.UTF-8”

i to

config.time_zone = ‘Warsaw’

no wiec wywlam te cuda i daje:

<%= post.created_at.to_formatted_s(:polish_date) %>

to mi daje:
01.04.2009 wiec tez zle uparcie twierdzi ze 1 to dzien a 4 miesiac !!

ustaw datestyle = ‘iso, dmy’ w postgresql.conf i zrob pg_ctl reload

no operacje na bazie to sie domyslam ze sa mozliwe, i tak tez chyba zrobie, ale chodzilo mi o cos w ror, jakis cudem taka potezna apliakcja nie radzi sobie z tak elementarnymi rzeczami?

ech no i kicha

/var/lib/…/postgresql.conf

datestyle = ‘iso, dmy’

restart postfres

wywalilem cala baze, na nowo utworzylem

dodaje testowy wpis i:

01 May, 2009

dalej nie tak :confused:

blog=# SHOW datestyle ;
DateStyle

German, DMY
(1 row)

wiec w bazie na pewno jest ok jak juz mowilem

german dmy, to nie iso dmy :stuck_out_tongue: to jakis niemiecki hosting ? :slight_smile: napewno edytujesz poprawny konfig taki jak masz w zmiennej srodowiskowej $PGDATA ?

tak to jest jedyny konfig globalny wiec na pewno jest ok a German to standard, wazne ze pozniej jest dmy dzien miesiac rok !!

german to tylko ustawienie czy beda kropki kreski ukosniki czy co tam miedzy tymi dmy malo istotne

ISO Date to 2009-01-03 18:36Z czyli YYYY-MM-DD a nie żadne dmy.

Ustaw poprawnie postgresa i sprawdź najlepiej w konsoli irb:

[code=ruby]require ‘time’

Time.parse(‘04.01.2009 00:01:42.144292’)
=> Wed Apr 01 00:01:42 +0100 2009

Time.parse(‘2009-01-04 00:01:42’)
=> Sun Jan 04 00:01:42 +0000 2009[/code]

A tak przy okazji Date i Time w ruby jest kurewski bottleneckiem. http://third-base.rubyforge.org/ jesli komus zalezy na tym aby bylo troche szybciej :slight_smile:

Ale Date() nie jest tylko problemem ruby, JavaScript np w gecko ma podobne dylematy: https://bugzilla.mozilla.org/show_bug.cgi?id=456165#c25 jesli ktos jestciekaw jakie polecam lekture :stuck_out_tongue: