gotar
January 3, 2009, 11:04pm
1
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?
gotar
January 4, 2009, 12:38pm
2
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
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ł :> )
zajac
January 4, 2009, 2:51pm
4
[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.
oki
January 4, 2009, 3:31pm
5
badzok
January 4, 2009, 4:54pm
6
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
Tomash
January 4, 2009, 8:41pm
7
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.
gotar
January 4, 2009, 9:01pm
8
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
gotar
January 4, 2009, 9:02pm
9
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
gotar
January 4, 2009, 9:12pm
10
a w Rails mam
<%= post.created_at %> - 2009-04-01 02:01:42 +0200
<%= post.created_at.day %> - 1
czyli zle powinno byc 4
gotar
January 4, 2009, 9:14pm
11
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’
gotar
January 4, 2009, 9:19pm
12
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
gotar
January 5, 2009, 12:07am
14
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?
gotar
January 5, 2009, 12:19am
15
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
gotar
January 5, 2009, 12:23am
16
blog=# SHOW datestyle ;
DateStyle
German, DMY
(1 row)
wiec w bazie na pewno jest ok jak juz mowilem
german dmy, to nie iso dmy to jakis niemiecki hosting ? napewno edytujesz poprawny konfig taki jak masz w zmiennej srodowiskowej $PGDATA ?
gotar
January 5, 2009, 1:21am
18
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
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