web-dev-qa-db-ja.com

Ruby on Rails-日付を必要な形式で表示する方法?YYYY-MM-DD HH:MM:SS UTCからMM / DD /への変換YYYY

私はRoRの初心者です。多くのことを試しましたが、ついに次のようになりました:

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

しかし、これも私にエラーを与えています:

$_ value need to be String (nil given)

しかし、request.baseline_start_dateが価値を与えることは知っています(個別に印刷してみました)。与えられたnilとしてどれが言っているのか分かりません。

フォーマット変換を実現する方法に関する提案はありますか?

18
Ayyappa Das

Railsでは、to_time関数を文字列に対して実行して、Dateオブジェクトに変換します。

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

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

便利でインタラクティブなリファレンスガイドについては、 http://www.foragoodstrftime.com/ を参照してください。

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

たぶん、フォーマット文字列の大文字の使い方が間違っていると思います。

27
Bob Aman

http://apidock.com/Rails/ActiveSupport/CoreExtensions/DateTime/Conversions/to_formatted_s でアクティブサポートのドキュメントと例を確認してください。

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"

または、本当にカスタマイズしたい場合は、次のようにヘルパーを定義します。

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

ActiveSupportのString#to_time(またはDate#to_time)関数を使用して、文字列をTime(またはDate)オブジェクトに変換できます。次に、すでに行っているようにstrftimeを使用します。

3
insane.dreamer

私はプロセス全体を簡素化し、日付のフォーマットをDRYにする本当に素晴らしい宝石を書きました。

それをチェックしてください: http://github.com/platform45/easy_dates

3
Ryan

私が行ったことは、config/initializerにconversions.rbという名前のイニシャライザを追加することです。その後、次のような行を追加します。

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

そこからあなたはあなたのフォーマットを使ってあなたの日時をレンダリングすることができます:

dateVar.to_s(:<name>)

便利なリストがあります ここ 書式設定トークンの

1
Chad Ruppert

返信ありがとうございます。私の問題は、出力がすでに文字列であるようで、文字列の日付から別の形式に変換する必要があることです。

データベース(Oracle)に保存されている日付を見るとmm/dd/yyですが、表示されると、タイムスタンプとタイムゾーンが追加されます。

Configuration\environment.rbのデフォルトをActiveSupport :: CoreExtensions :: Date :: Conversions :: DATE_FORMATS.merge!(:default => '%d%b%Y')として設定しようとしましたが、それもそうではないようです助けて。

最後に、タイムゾーン形式からmm/dd/yyyyに変換する文字列を取得するだけで十分です。

0
Ayyappa Das