Xử lý format time trong rails
Bài đăng này đã không được cập nhật trong 7 năm
Xin chào các bạn, các bạn làm back-end chắc hẳn đã gặp không ít rắc rối đối với việc format và lưu trữ dữ liệu thời gian trong hệ thống của mình.
Khi mà hệ thống yêu cầu dùng đa quốc gia đồng nghĩa với việc, hệ thống sẽ hiện thị thời gian tưng ứng với zone của từng vùng và đồng thời cũng hiển thị form format theo từng vùng
ví dụ:
- ở việt nam, chúng ta hay dùng là ngày/tháng/năm
- ở nhật, có thể là dùng năm/tháng/ngày
- ...
Vậy làm sao chúng ta có thể xử lý việc đó bây giờ.
Giá trị thời gian chúng ta sẽ hiện thị 2 dạng
- dạng hiển thị khi show ra màn hình hệ thống (21:04 28/12/2016)
- dạng lưu trữ trong DataBase (2016-12-28 21:04:10 +0700)
vậy làm sao để lưu động linh hoạt 2 dạng này trong hệ thống
Chúng ta sẽ sử dụng 2 công cụ là strftime và strptime
> Time.now.strftime("%H:%M %Y/%m/%d")
=> "21:06 2016/12/28"
> DateTime.strptime("21:06 2016/12/28", "%H:%M %Y/%m/%d")
=> Wed, 28 Dec 2016 21:06:00 +0000
Như chúng ta thấy kết quả, strftime thì không vấn đề gì, nhưng đối với strptime thì sẽ set về zone +0000, vậy nên đẻ được kết quả đúng chúng ta cần update thêm phần time zone cho data
> DateTime.strptime("21:06 2016/12/28", "%H:%M %Y/%m/%d").change(offset: Time.zone.formatted_offset)
=> Wed, 28 Dec 2016 21:06:00 +0900
Nếu muốn chuyển time_zone hệ thống thì mọi người có thể dùng hỗ trợ của ActiveSuport::TimeZone để làm options. Mọi người có thể tham khảo code dưới đây
<%= form_for @user do |f| %>
<%= f.time_zone_select(:t_zone, ActiveSupport::TimeZone.all.sort, {model: ActiveSupport::TimeZone, default: Time.zone.name}) %>
<%= f.submit "Change" %>
<% end %>
Trên đây là mình giớ thiệu sơ qua cách để xử lý đối với Time trong hệ thống của ruby
Cám ơn các bạn đã quan tâm theo dõi
Xin chào và hẹn gặp lại ^_^
All rights reserved