javascript - Ruby Date.parse 和 Javascript new Date() 不接受相同的格式

标签 javascript jquery ruby-on-rails ruby jquery-ui

解决方案:

我使用了american_date gem对于 ruby​​ 端,并使用此正则表达式进行 js 验证。

/^(?=\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)

问题

我在日期字段上使用 jquery datepicker,用户可以输入日期。

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

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

!/Invalid|NaN/.test(new Date(value).toString());

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

Ruby 和 javascript 可惜让这件事变得困难。

IRB:

2.0.0p247 :018 > Date.parse("11/02/2013")
 => Mon, 11 Feb 2013 

JavaScript 控制台

new Date("11/02/2013")
Sat Nov 02 2013 00:00:00 GMT+0100 (CET)

IRB:

2.0.0p247 :029 >   Date.parse("11.02.2013")
=> Mon, 11 Feb 2013 

JavaScript 控制台

new Date("11.02.2013")
Sat Nov 02 2013 00:00:00 GMT+0100 (CET)

如果验证通过,我在数据库的日期字段中得到一个零,并且 如果日期是 ruby​​ 正确的,则验证器不会通过。

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

最佳答案

看一下 gem american_date ,它将允许 ruby​​ 获取格式为 MM/DD/YYYY 的日期,并且就像在 Gemfile 中添加一行一样简单

可以使用gem install american_date安装

➜  ~  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)> 

关于javascript - Ruby Date.parse 和 Javascript new Date() 不接受相同的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18558516/

相关文章:

ruby-on-rails - 在 Rails 中获取每个季度的第一个星期一

javascript - 在javascript上将函数重新分配给变量

javascript - 无法调用外部jquery文件

javascript - Angular2 测试。 Promise 从未在 TestBed.compileComponents 中解决

jquery - 用于创建图表的 Javascript 库?

ruby-on-rails - 获取最后 5 条记录

Javascript window.open 在 Chrome 中不一致

javascript - 带有 JQuery 提示的 Digg 样式表单验证

javascript - 带有 JS/jQuery 滚动的纯 CSS 视差

ruby-on-rails - 解析日期时间字符串以转换为不同格式时,Ruby on Rails 出现无效日期错误