我正在获取当前日期,将其月数减少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
答案 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"
,并且同样没有意义。
我认为这就是我发现的所有......判决:抛出这些代码并重新开始,记住上述所有内容。