2009-04-20 9 views
18

Ben bir RoR acemiyim. Sonunda, bir çok şey denedik aşağıdaki geldi:Ruby on Rails - bir formatı nasıl görüntüleyeceğimi ihtiyacım var? YYYY-AA-GG HH: MM'den dönüştürme: SS UTC, AA/GG/YYYY

<td> 
<%= Date.strptime(request.baseline_start_date, "%Y-%M-%D %H:%M:%S %Z").strftime("%M/%D/%Y")%> 
</td> 

Fakat bu aynı zamanda bana bir hata veriyor:

$_ value need to be String (nil given) 

Ama ayrı yazdırmadan çalıştı (yani request.baseline_start_date bana değer veriyor biliyor). Nil olarak verilenin hangisi olduğunu bilmiyorum.

Biçim dönüşümü nasıl gerçekleştirebileceğime dair herhangi bir öneriniz var mı? Eğer birlikte biçimini kullanarak datetime işleyebilen üzerinde

ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.update(:<name> => '<formatting>') 

Oradan: Ben ne yaptım

cevap

1

aşağıdaki gibi bir satır ekleyin Bundan sonra config/başlatıcısı bir başlatıcı adlı conversions.rb ekleyin

dateVar.to_s(:<name>) 

0

teşekkürler cevap için çok biçimlendirme jeton kullanışlı liste here yoktur. Benim sorunum, çıktı zaten bir dize gibi görünüyor ve dize tarihini başka bir formata dönüştürmek zorundayım.

Veritabanında saklanan tarihe baktığımda (Oracle), mm/gg/yy, ancak görüntülendiğimde, zaman damgası ve saat dilimi ekler.

Ben ActiveSupport :: CoreExtensions :: Tarih :: Dönüşümler :: DATE_FORMATS.merge olarak Yapılandırma \ environment.rb varsayılan ayar çalıştı! ( : Varsayılan => '% d% b% Y' ) Ama bu aynı zamanda yardımcı gözükmüyor.

Sonuçta, yalnızca Timezone biçiminden mm/gg/yyyy'ye dönüştürmek için dize alırsam, bu yeterlidir.

3

Dizeyi bir Zaman (veya Tarih) nesnesine dönüştürmek için ActiveSupport'ta String # to_time (veya Date # to_time) işlevini kullanabilirsiniz. Ardından, strftime'ı zaten varmış gibi kullanın.

+1

Bu yorum, burada, bana çok yardımcı çalıştı benim kodudur: 1.day.ago .to_date.strftime ("% m /% d /% Y") – KSolo

+0

KSolo'nun çözümü benim için mükemmel çalışıyor. –

27
Date.strptime(
    "2009-04-24 18:33:41 UTC", 
    "%Y-%m-%d %H:%M:%S %Z" 
).strftime("%m/%d/%Y") 
# => "04/24/2009" 

Belki de biçim dizelerinizde büyük harf kullanımı yanlış oldu.

+0

Bu da büyük bir yardımcı oldu, sadece strptime için giriş tarihinin doğru formatını belirtmeyi anladığınızdan emin olun. Bu benim orijinal hatamdı, ama bunu bir kez yaptım, yorum doğruydu. – KSolo

3

Tüm süreci basitleştiren ve tarih biçimlendirmesini DRY yapan gerçekten güzel bir taş yazdım.Eğer bir Date nesnesi haline dönüştürmek için bir ipe to_time işlevini kullanabilirsiniz Rails http://github.com/platform45/easy_dates

31

:

adresten kontrol edin

'2012-11-14 14:27:46'.to_time.strftime('%B %e at %l:%M %p') 

#=> "November 14 at 2:27 PM" 

kullanışlı, etkileşimli başvuru kılavuzu için bakınız http://www.foragoodstrftime.com/

14

kontrol edin en aktif destek dokümantasyon ve örnekler: http://apidock.com/rails/ActiveSupport/CoreExtensions/DateTime/Conversions/to_formatted_s

Örnekler

datetime = DateTime.civil(2007, 12, 4, 0, 0, 0, 0) # => Tue, 04 Dec 2007 00:00:00 +0000 

datetime.to_formatted_s(:db)   # => "2007-12-04 00:00:00" 
datetime.to_s(:db)      # => "2007-12-04 00:00:00" 
datetime.to_s(:number)     # => "20071204000000" 
datetime.to_formatted_s(:short)   # => "04 Dec 00:00" 
datetime.to_formatted_s(:long)   # => "December 04, 2007 00:00" 
datetime.to_formatted_s(:long_ordinal) # => "December 4th, 2007 00:00" 
datetime.to_formatted_s(:rfc822)  # => "Tue, 04 Dec 2007 00:00:00 +0000" 

Yoksa gerçekten özelleştirmek isterseniz, gibi yardımcı tanımlayın:

def custom_format(time) 
    Time::DATE_FORMATS[:w3cdtf] = lambda { |time| time.strftime("%Y-%m-%dT%H:%M:%S# {time.formatted_offset}") } 
end 
+0

Resmi raylar API daha iyi bir kaynak olabilir http://api.rubyonrails.org/v2.3.8/classes/ActiveSupport/CoreExtensions/DateTime/Conversions.html datetime.to_formatted_s için – Btuman

+0

+1 (: db) –