如何快速计算日期差
近日遇到一奇葩案件,2007年的河南洛阳某县,当事人因合同诈骗被刑拘,取保候审金竟高达30W(实务中,刑事犯罪的保证金浮动区间为2K-5W,当然不能一概而论)。
但该案更离奇之处在于,执行机关自取保候审释放后,一直懈怠敷衍,2008年迄今,始终未办理解除取保候审强制措施程序,也未通知决定机关,更遑论出具任何撤案文书。当事人及其代理律师为此奔走期间,公安机关一通电话,告知当事人代理律师,以无法联系到当事人为由,没收其30W保证金。
钓鱼式司法案件屡见不鲜,但涉案金额如此之巨的,倒是罕有。
在写国家赔偿申请书时,遇到一个利息计算的issue,按理说,翻一下日历或者打开Fantastical 计算一下日期差就是了,但这个案件比较特殊,案件发生至今已逾11年,翻日历掰手指头算?这活我才不乐意做。
在线计算工具并不友好
第一反应是想了解取保候审释放之日起距今有多少个月份。放度娘一搜,国内市面上在线日期差计算工具,基本只支持天数,而不支持年、月数显示。
国外的timeanddate
倒是支持日期差计算,不过终究在墙外,不适宜日常本地化的小平快的需求。
利用Excel的DATEDIF函数
想起Excel有很多函数能满足稀奇古怪的需求,印象最深的是有个能在老板眼皮子底下用Excel划水刷论坛看股票的改造。查了一下,Excel确实有一个DATEDIF函数 可供利用。
C3=DATEDIF(A3,B3,"d") // 显示间隔天数
C3=DATEDIF(A4,B4,"m")// 显示间隔月数
C3=DATEDIF(A5,B5,"y")// 显示间隔年数
看似便捷对吧?不过为得到上述结果,足足花了5分钟构建数据表、引入不同函数,还不算上Mac打开Excel的龟速时间。我绝对无法接受如此低效的workflow。
Alfred Workflow之DATE SPAN
Mac最得心应手的工具是什么,帽子王Alfred!Powerpack还支持自定义workflow。那么,有没有现成的workflow来支持日期差计算呢?
放骨狗嗅了一圈,还真有个名为Date Span 的Alfred workflow专门解决了日期差的计算难题。据作者说明,是基于PHP 5.3以上版本的DateInterval功能,具体代码可以参考PHP文档 。
使用实例说明
1.计算当前日期时间与某个mm/dd/yy
日期的差,示例:
datespan 6/23/2007 //注意日期格式是[月/日/年]
2.计算任意两个mm/dd/yy
日期的差,示例:
datespan 6/23/2007 to 4/23/2020 //注意中间有一个to
3.计算任意两个mm/dd
日期的差,示例:
datespan 3/23 to 11/12 //注意中间有一个to
显而易见,Date Span支持精确到分钟的日期差显示,另外也支持工作周(bussiness week)、周(week)、天数(day)、小时(hour)、分钟(minute)等单位,唯独不支持月数(month),恐怕这也是唯一的遗憾了,常见的解决办法无非有:
- 直接心算 : $f(x)=a years + b months =(12a + b)months$
- 修改源码
在Date Span配置界面右下角跳转到Data Span目录:
找到datespan.php
,用编辑器打开增加以下两处代码
$total_months = intval($diff->format('%m'))+intval($diff->format('%y'))*12;
if ($total_months > $months)
{
$wf->result(
"months",
pluralize('month', $total_months),
pluralize('month', $total_months),
"copy to clipboard",
$icon
);
}
结果如图:
Alfred Workflow之Date Calculator
新发现另外有个名为Date Calculator 的Workflow也可以实现上述计算,而且参数众多,可以任意组合,足以满足各类需求。
基础输入格式:
dcalc 23.06.07 - now
now
后面可以加上w/m/d等参数,分别表示周/月/天,插件还允许用数学符号代替常用日期,如:
- < 代表yesterday
-
- 代表today
-
代表tomorrow
- & 代表time
下面略举几例:
只显示周数
dcalc 23.06.07 - now w
或者dcalc 23.06.07 - * w
只显示月数
dcalc 23.06.07 - now m
或者dcalc 23.06.07 - * m
只显示天数
dcalc 23.06.07 - yesterday d
或者dcalc 23.06.07 - < w
显示周数+天数
dcalc 23.06.07 - tomorrow wd
或者dcalc 23.06.07 - > w
显示月数+周数+天数
dcalc 23.06.07 - now mwd
显示全部参数
dcalc 23.06.07 - now long