我想把用户的日期上传到我的数据库中,不管是Date还是String的格式,然后我想查询用户,并对所有的日期进行$lte和$gte查询,以找到特定年龄范围的用户(例如:25-30)。然后我想查询用户,并对所有日期进行$lte和$gte查询,以找到特定年龄范围的用户(例如:25-30),但我目前遇到的问题是这样的。
如果我对29岁的用户进行查询,比如说我有
User1: birthday: 21st May 1991
User2: birthday: 21st September 1991
如果今天是例如2020年6月12日,它给我两个用户(User1和User2),但它应该只给我User1,因为他有29岁,而User2将在几个月内29岁。谁能帮我找到一个解决方案或提出一个解决方案?谢谢你
我目前的代码。
ageRangeFirst = 29
ageRangeSecond = 31
current_year = int(datetime.now().year)
newFirstAge = current_year - ageRangeFirst
newSecondAge = current_year - ageRangeSecond
filter['dateOfBirth'] = {"$lte": '{}1231'.format(newFirstAge), "$gte": '{}0101'.format(newSecondAge)}
在数据库中,我将日期保存为字符串格式。
"dateOfBirth" : "19911201" //yyyyDDmm as String
我知道我现在的方法应该会得到一个结果,但我需要更好的日期和年龄查询和管理。
谢谢你的帮助
def addZeroToNumber(number):
if number < 10:
return '0{}'.format(number)
else:
return str(number)
def checkTheAge():
ageRangeFirst = int(request.get_json()['ageRangeFirst'])
ageRangeSecond = int(request.get_json()['ageRangeSecond'])
current_year = int(datetime.now().year)
current_month = int(datetime.now().month)
current_day = int(datetime.now().day)
print(current_year, addZeroToNumber(current_month), addZeroToNumber(current_day))
newFirstAge = current_year - ageRangeFirst
newSecondAge = current_year - ageRangeSecond - 1
date1Filter = datetime.strptime('{}-{}-{}T00:00:00.000Z'.format(newSecondAge, addZeroToNumber(current_month), addZeroToNumber(current_day)), "%Y-%m-%dT%H:%M:%S.%fZ") #19
date2Filter = datetime.strptime('{}-{}-{}T00:00:00.000Z'.format(newFirstAge, addZeroToNumber(current_month), addZeroToNumber(current_day)), "%Y-%m-%dT%H:%M:%S.%fZ") #17
print(date1Filter)
print(date2Filter)
filter['dateOfBirth'] = {"$gte": date1Filter, "$lte": date2Filter}