场景示例
1.朋友圈里好友发布的动态帖子时间显示为:XX天前,XX月前,刚刚,X年前...
2.聊天消息上面显示的日期格式:刚刚,X分钟前...
需求说明:
1.要求将类似于2024-03-05 18:00:00这样的时间结合当前时间转化成1天前这样的格式。
2.只需要知道目标时间即可获取转化结果,如YYYY-MM-DD hh:mm:ss转成XXXX
废话不多说,直接代码演示:
from datetime import datetime, timedelta
def humanize_datetime(db_datetime_str):
# 解析数据库日期时间字符串
db_datetime = datetime.strptime(db_datetime_str, '%Y-%m-%d %H:%M:%S')
# 获取当前时间
now = datetime.now()
# 计算时间差
time_diff = now - db_datetime
# 定义时间单位的阈值
minute_diff = timedelta(minutes=1)
hour_diff = timedelta(hours=1)
day_diff = timedelta(days=1)
month_diff = timedelta(days=30) # 假设一个月平均30天
year_diff = timedelta(days=365) # 假设一年365天
# 根据时间差计算描述
if time_diff < minute_diff:
return "刚刚"
elif time_diff < 2 * minute_diff:
return "1分钟前"
elif time_diff < hour_diff:
return f"{time_diff.seconds // 60}分钟前"
elif time_diff < 2 * hour_diff:
return "1小时前"
elif time_diff < day_diff:
return f"{time_diff.seconds // 3600}小时前"
elif time_diff < 2 * day_diff:
return "昨天"
elif time_diff < month_diff:
return f"{time_diff.days // 7}周前"
elif time_diff < 2 * month_diff:
return "1个月前"
elif time_diff < year_diff:
return f"{time_diff.days // 30}个月前"
elif time_diff < 2 * year_diff:
return "半年前"
else:
return db_datetime.strftime('%Y-%m-%d %H:%M:%S')
# 示例使用
# db_datetime = "2024-03-04 16:30:00"
# print(humanize_datetime(db_datetime))
代码说明:
1.以上代码中引入的包是python自带的
2.该函数传的时间格式为:YYYY-MM-DD hh:mm:ss
3.根据时间差计算可以衍生出许多情况的表达形式,以上只是作为示例
4.代码最后有使用演示,全部copy到项目跑一次就OK了!