我有一个rails生成的日期和一个jQuery生成的日期。
导轨日期打印如下:2002-10-27
并且jQuery日期打印如下:Tue Aug 14 2001 00:00:00 GMT-0500 (CDT)
我想检查jQuery日期是否大于或小于rails日期。但无论日期如何,jQuery日期总是被解释为大于rails日期。
为什么会这样,我怎样才能成功比较两个日期?
var year = 2001
var month = 9
month --
var day = 14
var date = new Date(year, month, day);
<% @date = Date.today - 18.years %>
if( date > <%= @date %> ) {
//this code is always executed, no matter what dates I choose
}
更新
实际上我只是弄清楚问题是它只允许1969年之前的日期。我打算让代码只允许18岁以上的日期。有谁知道为什么会有差异?
更新2:
我在我的js控制台和rails控制台上测试了2000年10月5日的时间输出,它们给出了相同的前六位数字,但是js控制台增加了三个零。
var year = 2000
var month = 10
month --
var day = 5
var date = new Date(year, month, day);
date.getTime();
=> 970722000000
Date.new(2000,10,5).to_time.to_i
=> 970722000
答案 0 :(得分:4)
事实证明问题是js控制台以毫秒为单位打印时间,这就是我获得973404000000而不是rails控制台中的973404000的原因。
我所要做的就是将js时间除以1000,并将js时间与轨道时间进行比较,效果非常好。
var year = 2000
var month = 10
month --
var day = 5
var date = (new Date(year, month, day).getTime() / 1000);
date
=> 970722000
Date.new(2000,10,5).to_time.to_i
=> 970722000
答案 1 :(得分:3)
Jquery Date的用户日期格式模式,用于根据ruby日期更改日期格式,或者第二个选项是使用strftime根据jquery转换ruby日期格式。
答案 2 :(得分:1)
您可以尝试将它们转换为unix时间戳并进行比较。如果你不关心时间,只关心日期,它应该有效。
var year = 2001
var month = 9
var day = 14
var date = new Date(year, month, day);
<% @date = Date.today - 18.years %>
if ( date.getTime() > <%= @date.to_time.to_i %>) {
// do something
}
答案 3 :(得分:1)
我使用像Moment.JS这样的库来处理客户端的日期解析需求。然后以ISO8601等标准格式发送服务器,以确保您在误导方面没有任何问题。
大纪元时间也会奏效,但正如您所见,您必须承担确保他们处于同一单位的负担。
答案 4 :(得分:0)
为了比较2个日期,我可以使用moment.js
使用ur rails date创建一个时刻日期。与你的jquery日期一样。
你现在可以轻松比较2个日期。
如果您需要帮助,请参阅此帖子:moment-js-date-time-comparison