日期比较出错

时间:2015-12-26 19:47:17

标签: javascript

我正在获取当前日期,将其月数减少6个月,并检查我的数据库中的日期是否高于创建日期。然而,它不起作用。我做错了什么?

var today = new Date();
                var dd = today.getDate();
                var mm = today.getMonth()-5; 
                var yy = today.getFullYear();
                yy = yy.toString().substr(2,2);
                today = dd+'-'+mm+'-'+yy;

"END_DATE >="+today +"

这是我的数据库中存储的日期之一的格式: 28-DEC-16

今天的变量给了我26-6-15

1 个答案:

答案 0 :(得分:1)

有几件事。

  • 你的逻辑是错误的。 1月份,today.getMonth()-5会产生-5,显然不是有效月份。要正确减去月数,请尝试today.setMonth(today.getMonth()-5) - 这将根据需要调整年份,但请注意,如果您从3月31日(2016年2月28日至2016年29月)减去一个月,则可能无法按预期行事?3月3日?2016年2月???) - 这是日期操作的一般问题,需要编写更多代码来处理这些边缘情况,但这是由你来决定如何处理。

  • 月份从零开始,但您将它们放入日期字符串中。再次使用1月作为示例,这将导致月份部分-00-

  • 你根本没有填充你的号码。这可能是也可能不是问题,但您可能希望将零添加到小于10的数字,以确保正确的字符串长度和更容易的比较。

  • 您的日期格式不好。日期的正确格式为Y-m-d,例如今天为2015-12-26。这种格式不仅减少了歧义,而且还可以作为字符串进行排序而不需要任何努力。考虑在任何地方使用此格式,并在将其呈现给用户时仅将其格式化为其他格式(例如。d/M/Y - 26/Dec/2015)。

  • 您正在将原始变量放入数据库查询中。这有很多原因,如果可能的话你应该使用参数,但至少你需要在字符串周围引用(例如"END_DATE >= '"+today+"'")。否则,查询会读取"END_DATE >= 26-12-2015"之类的内容,相当于"END_DATE >= -2001",并且同样没有意义。

我认为这就是我发现的所有......判决:抛出这些代码并重新开始,记住上述所有内容。