首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何控制rails 4 datetime_local_field的输出?

如何控制rails 4 datetime_local_field的输出?
EN

Stack Overflow用户
提问于 2014-12-31 22:21:08
回答 2查看 592关注 0票数 0

我使用datetime_local_fieldjquery-datetimepicker-rails来获取表单中的本地日期和时间条目。该视图包括:

代码语言:javascript
运行
复制
<%= f.datetime_local_field :start, class: 'datetimepicker' %>

它以一种格式输出时间,包括日期和时间之间的“T”,例如。2014-12-29T14:00:32。JavaScript不认为这是一个有效的时间戳,因此日期和时间不会传播到选择器中,而是使用当前的时间戳。有办法让这件事起作用吗?有更好的方法吗?

我也在datetime_field中尝试过这一点,并得到了类似的结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-31 22:47:31

这是一种ISO8601日期格式,JS的Date.parse理解这种格式。您应该覆盖jquery-datetimepickerDate.parseDate方法,如下所述:parser

票数 2
EN

Stack Overflow用户

发布于 2015-01-01 14:13:50

@smathy的回答使我朝着正确的方向努力,至少它能使我做到这一点。我需要做一些进一步的工作才能让它运转起来。必须在init运行之前完成Date.parsedate的重写,并且必须返回类型为Date的对象。这将产生以下代码:

代码语言:javascript
运行
复制
//= require jquery.datetimepicker
Date.parseDate = function( input, format ){return new Date(Date.parse(input));};
jQuery(document).on('ready page:change', function() {
    var datetimefield = jQuery('.datetimepicker');
    datetimefield.datetimepicker({
        format: 'Y-m-d H:i:s',
        lang: datetimefield.attr('lang') || datetimefield.parents('[lang]').attr('lang')
    });
});

//=require jquery.datetimepicker/init已经被gem中的实际init代码所取代,并且覆盖已经在它之前运行。

我不再使用f.datetime_local_field,而是使用f.datetime_field来防止时区被应用两次。

此外,如果在同一页上多次使用此代码,则会出现问题。当您第一次访问前面的字段时,它们会显示来自最后一个字段的时间戳。我在找一个更好的约会时间选择者,如果我找到一个,我会回来报告的。

编辑:2014年1月18日

我使用了Trent的jQuery时间选择器https://github.com/trentrichardson/jQuery-Timepicker-Addon和浏览器时区-rails创业板。时间显示为文本字段中的格式化值。

代码语言:javascript
运行
复制
      <%= f.text_field :start_time, value: f.object.start_time.strftime('%F %T'), class: 'datetime' %>

在本地时间以一致的,但人类可读的格式。时间选择器的JS配置是:

代码语言:javascript
运行
复制
$(document).on("ready page:load", function() {
    $('.datetime').datetimepicker({
         dateFormat: $.datepicker.ISO_8601,
        separator: ' ',
        timeFormat: 'HH:mm:ss',
        showSecond: false,
        showMillisec: false,
        showMicrosec: false,
        showTimezone: false,
        pickerTimeFormat: 'hh:mm tt'
    });
});

on("ready page:load"是必需的,因为turbolinks不会导致被触发。这段代码正确地支持页面上的多个日期时间字段,但是它需要一些额外的验证。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27726847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档