首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby Date.parse和Javascript新日期()不接受相同的格式

Ruby Date.parse和Javascript新日期()不接受相同的格式
EN

Stack Overflow用户
提问于 2013-09-01 12:38:54
回答 3查看 758关注 0票数 0

解决方案:

我使用日期宝石作为ruby端,并使用这个regex进行js验证。

代码语言:javascript
运行
复制
/^(?=\d)(?:(?:31(?!.(?:0?[2469]|11))|(?:30|29)(?!.0?2)|29(?=.0?2.(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(?:\x20|$))|(?:2[0-8]|1\d|0?[1-9]))([-./])(?:1[012]|0?[1-9])\1(?:1[6-9]|[2-9]\d)?\d\d(?:(?=\x20\d)\x20|$))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\x20[AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/.test(value)

问题

我在日期字段上使用,用户可以键入日期。

我希望我的应用程序中的用户能够选择他们自己的日期格式。他们可以选择美国格式mm/dd/yy或欧洲格式dd.mm.yy。

我正在使用javascript格式验证器。像这样

代码语言:javascript
运行
复制
!/Invalid|NaN/.test(new Date(value).toString());

(我非常喜欢不使用正则表达式的想法)

令人遗憾的是,Ruby和javascript使这件事变得很困难。

irb:

代码语言:javascript
运行
复制
2.0.0p247 :018 > Date.parse("11/02/2013")
 => Mon, 11 Feb 2013 

javascript控制台

代码语言:javascript
运行
复制
new Date("11/02/2013")
Sat Nov 02 2013 00:00:00 GMT+0100 (CET)

irb:

代码语言:javascript
运行
复制
2.0.0p247 :029 >   Date.parse("11.02.2013")
=> Mon, 11 Feb 2013 

javascript控制台

代码语言:javascript
运行
复制
new Date("11.02.2013")
Sat Nov 02 2013 00:00:00 GMT+0100 (CET)

如果验证通过,我将在数据库中的date字段中获得一个空值,如果日期是ruby更正的,验证器将不会通过。

我需要一个优雅的解决方案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-01 18:14:15

看看gem 日期,它将允许ruby采用MM/DD/YYYY格式的日期,并且只需在Gemfile中添加一行即可。

可以与gem install american_date一起安装

代码语言:javascript
运行
复制
➜  ~  irb                      
2.0.0p0 :001 > require 'american_date'
=> true 
2.0.0p0 :002 > Date.parse('11/02/2013')
=> #<Date: 2013-11-02 ((2456599j,0s,0n),+0s,2299161j)> 
票数 1
EN

Stack Overflow用户

发布于 2013-09-01 18:06:34

通常,您希望以YYYY-MM-DD格式将数据存储并发送到ruby,即2013-09-01。

代码语言:javascript
运行
复制
Date.parse("2013-09-01")
# => Sun, 01 Sep 2013

我通常使用jquery的altField属性。altField应该引用您添加到页面中的一个隐藏字段来存储日期的YYYY DD格式,然后在ruby中,您将忽略从datepicker输入字段发送的值。

  • http://api.jqueryui.com/datepicker/#option-altField
  • http://api.jqueryui.com/datepicker/#option-altFormat

示例:给定带有属性start_on的rails模型事件

代码语言:javascript
运行
复制
jQuery(document).ready(function() {

  // initialize the datepicker input field
  jQuery('#date_picker_start_on').datepicker({
    "altField":"#event_start_on",
    "altFormat":"yy-mm-dd",
    "dateFormat":"m/d/yy"
  }); 

  // this is need to work around a defect in datepicker altField handling
  jQuery('#date_picker_start_on').change(function() { 
    if (!$(this).val()) { 
      // clear the hidden field if datepicker cleared          
      jQuery('#event_start_on').val(''); 
    } 
  });

});

// assuming the markup of the hidden field something like
<input id="event_start_on" name="event[start_on]" type="hidden" />

注意,数据机上YYYY DD的altFormat转换为YYYY-MM http://api.jqueryui.com/datepicker/#utility-formatDate

您需要将dateFormat设置为登录用户区域设置的适当格式。

票数 1
EN

Stack Overflow用户

发布于 2013-09-01 12:43:34

使用Date::strptime,您可以指定日期格式。

代码语言:javascript
运行
复制
Date.parse("11/02/2013")
# => #<Date: 2013-02-11 ((2456335j,0s,0n),+0s,2299161j)>
Date.strptime("11/02/2013", '%m/%d/%Y')
# => #<Date: 2013-11-02 ((2456599j,0s,0n),+0s,2299161j)>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18558516

复制
相关文章

相似问题

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