我想显示访问用户的时间和相应的区域。例如,如果记录是在格林尼治标准时间中午12点创建的。如果有人在GMT+5
时区访问,则应显示下午5点。这在Rails中是否有可能实现?我设置了config.active_record.default_timezone = :local
,但它在UTC
中显示信息
运行rake timezones:local
返回多个条目:
* UTC +05:00 *
Ekaterinburg
Islamabad
Karachi
Tashkent
我属于Karachi
我不确定是否只使用RubyonRails就可以做到这一点。我不得不使用JavaScript将相应的时间更改为客户端的本地时区,我想这是服务器端代码无法完成的。这就是我在实现时所做的
首先创建一个辅助方法:
def show_created_time(record)
time = record.created_at.strftime('%Y-%m-%dT%H:%M:%S')
content_tag(:span, time, "data-timer" => time, :class => 'record_created_time')
end
注意:创建这样的helper方法并不是强制性的。您只需创建一个HTML元素(span、p、div等),它具有data-timer
属性,时间格式如上所述。
然后调用助手方法:
<%= show_created_time(record) %>
现在创建一个JavaScript文件,例如,让我们称之为timer.js:
$(document).ready(function() {
$("[data-timer]").each(function() {
var cTime = $(this).attr('data-timer');
// createdTime for record in db:
var createdTime = new Date(cTime);
// Return the timezone difference between UTC and User Local Time
// var date = new Date();
var userTimeZoneDiff = createdTime.getTimezoneOffset();
// Since there are 60,000 milliseconds in a minute
var MS_PER_MINUTE = 60000;
// Record final created_at will depend on the final subtracted date as:
var recordCreatedDateTime = new Date(createdTime - userTimeZoneDiff * MS_PER_MINUTE);
$(this).text(recordCreatedDateTime);
});
});
请确保在您的应用程序中包含此js。js:
//= require timer.js
这是我实现它的项目。在这里添加它作为参考。