如何以本地时区的格式在Ruby on Rails中显示日期和时间

时间:2017-09-21 12:34:56

标签: ruby-on-rails ruby

我是Ruby on Rails的新手,我刚刚做了一个博客教程来学习基础知识。 现在我需要知道如何在帖子中显示创建的日期/时间,并显示它的年龄。我尝试了一些东西,但我无法理解如何显示当前的创建时间。就像我在美国创建帖子一样,但在DK中,我看到当地时间。 但是,我想扩展这个以按时间顺序显示帖子。

代码:

    <h2><%= @post.title %></h2>
    <p><%= @post.body %></p>
    <p> <%= @post.created_at.strftime('%B %d %Y, %l:%M%P, %z') %></p>
    <hr>
<%= link_to 'Edit', edit_post_path(@post), :class => 'btn btn-default'%>
<%= link_to 'Delete', post_path(@post),
            method: :delete,
            data: {confirm: 'Are you sure?'},
            :class => 'btn btn-danger'
%>
<hr>

<%= render 'comments/comments' %>
<%= render 'comments/form' %>

1 个答案:

答案 0 :(得分:1)

你可以用这种方法判断它的年龄:

http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-time_ago_in_words

<%= time_ago_in_words(@post.created_at) %>

要按时间顺序显示,您必须根据created_at属性对数据库搜索进行排序。在您的Controller中添加此行,以便您可以在视图中访问。

@post = Post.order('created_at DESC')

在您的视图中,您可以通过以下方式迭代数据:

<ol>
  <% @post.each do |p| %>
    <li><%= p.create_at %></li>
  <% end %>
</ol>

更新1

我在SO中找到了关于获取用户本地时间的答案,它解释了如何以两种方式实现这一目标:

How to display the time in user's timezone

更新2

解决问题的另一种简单方法。更改Rails中的默认时区,以便您可以在数据库中保存正确的时间(您,主机)。

How to change default timezone for Active Record in Rails?

这种方式无法从您的客户端获取时区,只有您设置为Rails默认的时区(从客户端获取时区到#UPDATE 1)。