0

我正在使用 html5 datetime-local 类型

<input type="datetime-local" value="" name="start_date1"/>

它将这个发送到控制器:2015-04-03T00:00

是否可以将其转换为:2015-04-03 00:00:00 +0100

4

3 回答 3

1

您可以尝试更改params[start_date1]为日期时间:

require 'date' # not needed if you're using Rails
params[start_date1] = DateTime.strptime(params[start_date1], '%Y-%m-%dT%R')

这里:

%Y - 带世纪的年份(可以是负数,至少 4 位)。

%m - 一年中的月份,用零填充 (01..12)。

%d - 一个月中的哪一天,用零填充 (01..31)。

%R - 24 小时制 (%H:%M)。

您的参数值“2015-04-03T00:00”被解析为 '%Y-%m-%dT%R' 因为,%Y 是 2015,%m 是 04,%d 是 03,“T”告诉那个时间是 24 小时格式。所以,我们就按原样放置,并使用 %R 来解析“小时:分钟”。

您可以在此处阅读有关DateTime 格式指令的更多信息。

于 2015-04-13T07:29:41.117 回答
1

在 Rails 中,您应该将应用程序的默认时区设置为config.time_zone. 然后

Time.zone.parse(params[:start_date1])

将默认为该时区。

Time.zone可以在运行时覆盖,请参阅http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#method-i-parse

您还应该看看这个:http ://www.elabs.se/blog/36-working-with-time-zones-in-ruby-on-rails

于 2015-04-13T07:32:15.687 回答
1

如果您使用的是 Rails,请查看:github.com/launchpadlab/decanter

基本思想是,这个 gem 为您提供了一个地方,可以在参数到达您的模型之前对其进行转换。有点像 Active Model Serializers 的逆。

于 2016-02-27T16:20:16.827 回答