如何计算指定datetime距今的分钟数?格式转换失败求解决方法
计算指定格式日期至今的分钟数解决方案
嘿,我懂你碰到的麻烦了——这种dd/mm/yyyy hh:mm:ss格式的日期字符串,确实和很多语言默认的解析规则不对付,转换失败太正常了。咱们一步步来搞定它:
核心思路
问题的关键在于正确解析自定义格式的日期字符串,只要把输入格式和解析规则对应上,计算时间差就会变得非常简单。下面以两种常用编程语言为例给出解决方案:
方案1:Python实现
Python的datetime模块里的strptime方法专门用来解析自定义格式的日期字符串,你只需要传入和输入完全匹配的格式符即可:
from datetime import datetime # 你的目标日期字符串 target_date_str = "18/05/2018 15:00:11" # 解析字符串为datetime对象,格式符必须严格对应输入格式 # %d=日, %m=月, %Y=4位年份, %H=24小时制小时, %M=分钟, %S=秒 target_datetime = datetime.strptime(target_date_str, "%d/%m/%Y %H:%M:%S") # 获取当前时间 current_time = datetime.now() # 计算时间差,转换成分钟数 time_difference = current_time - target_datetime minutes_passed = time_difference.total_seconds() / 60 # 如果你需要整数结果,可以取整 minutes_passed_int = int(minutes_passed) print(f"从目标时间到现在已过去约 {minutes_passed_int} 分钟")
为什么之前转换失败?大概率是你没指定正确的格式符,比如误用了%m/%d/%Y(月/日/年)的格式,或者把24小时制的%H写成了12小时制的%I,这些细节一定要和输入字符串完全匹配。
方案2:JavaScript实现
JavaScript的Date构造函数默认是月在前的格式,所以需要先拆分字符串,调整日期顺序后再创建日期对象:
const targetDateStr = "18/05/2018 15:00:11"; // 拆分日期和时间部分 const [dateSegment, timeSegment] = targetDateStr.split(' '); // 拆分日、月、年(注意JS的月份是0-11,需要减1) const [day, month, year] = dateSegment.split('/').map(Number); // 拆分时、分、秒 const [hour, minute, second] = timeSegment.split(':').map(Number); // 创建目标日期对象 const targetDate = new Date(year, month - 1, day, hour, minute, second); // 获取当前时间 const currentTime = new Date(); // 计算时间差(毫秒转分钟) const timeDiffMs = currentTime - targetDate; const minutesPassed = Math.floor(timeDiffMs / (1000 * 60)); console.log(`从目标时间到现在已过去约 ${minutesPassed} 分钟`);
关键提醒
不管用哪种语言,核心都是让解析规则和输入日期的格式严格对应——比如输入是日/月/年,就不能用月/日/年的规则解析,小时是24制就不能用12制的格式符,这是避免转换失败的核心要点。
内容的提问来源于stack exchange,提问作者Tony Cross
相关产品推荐
相关产品推荐

