问题
最近在编写一个脚本,从数据库里找到一个订单的创建时间,然后需要判断当前时间和订单创建的时间间隔几个月。比如订单创建的时间是2021-8-26,现在的时间是2022-03-10,那我想得出的月份差就是6个月
那如何使用python来实现呢?
解决方法
1. 先将目标时间和最近时间都通过年月日的方式取到
因为我使用的是pandas库来读取数据库语句的,那刚好pandas是有方法可以直接读取年月日数据
import pymysql
import pandas as pd
df = pd.read_sql(sql=sql, con=mysql_cn) #通过sql读取需要的数据
already_revenue_time = df.trade_start_time.values[0] #将该订单创建时间取出,但是年月日+0000的样式
trade_start_time =pd.to_datetime(already_revenue_time).date() #只保留年月日样式,输出为2021-08-26
2. 找到当前时间
通过datatime库自带的方法,即可以拿到当天日期的年月日时间
import datetime
current_time = datetime.date.today() #当前时间,输出数据为2022-03-10
3.月份相差比较函数
自定义一个计算月份差值的函数
def months(str1,str2):
#比较目标时间和当前时间相差几个月的函数
year1=str1.year
year2=str2.year
month1=str1.month
month2=str2.month
#比如2021-8-26 和2022-3-10,只相差了6个月,没有到7个月,所以我做了一下日数据的判定,保证得到的月份更加精准
if str1.day >= str2.day:
num=(year1-year2)*12+(month1-month2)
else:
num =(year1-year2)*12 + (month1-month2)-1
return num
4. 函数调用
if __name__ == "__main__":
month_difference =months(current_time,trade_start_time)
print(month_difference) #输出的结果是6
5. 完整代码(因sql是公司语句,不方便公开,大家可对照自家公司业务进行修改,学习方法就行)
import pymysql
import pandas as pd
import datetime
def months(str1,str2):
#比较目标时间和当前时间相差几个月的函数
year1=str1.year
year2=str2.year
month1=str1.month
month2=str2.month
#比如2021-8-26 和2022-3-10,只相差了6个月,没有到7个月,所以我做了一下日数据的判定,保证得到的月份更加精准
if str1.day >= str2.day:
num=(year1-year2)*12+(month1-month2)
else:
num =(year1-year2)*12 + (month1-month2)-1
return num
def get_data():
df = pd.read_sql(sql=sql, con=mysql_cn) #通过sql读取需要的数据
already_revenue_time = df.trade_start_time.values[0] #将该订单创建时间取出,但是年月日+0000的样式
trade_start_time =pd.to_datetime(already_revenue_time).date() #只保留年月日样式,输出为2021-08-26
current_time = datetime.date.today() #当前时间,输出数据为2022-03-10
month_difference =months(current_time,trade_start_time) #输出的结果是6
if __name__ == "__main__":
print(f"月份相差:{get_data()}个月")