今天上午在用数据库的时候,突然想到可以通过计算时间间隔更好地把握时间(其实就是无聊)。

在 qq 群里询问大佬们,拿到了一份文档:思源模板功能新人指南:模板语法 + 函数 + md 块语法 - 链滴)。
这份文档非常好用(我是个毫无编程基础的小白)。在读完文档之后,我把这个网址直接丢给豆包,让她给我写了一段,之后再自己慢慢修改,得到了下面这段代码:
.action{$duration := .完成打卡时间.Sub .开始打卡时间}
.action{$minutes := $duration.Minutes}
.action{$remainTime := float64 $minutes}
.action{$t := round $remainTime 0}
.action{$T := int $t}
.action{if gt $T 60}
.action{$hours := div $T 60}
.action{$remainMin := mod $T 60}
已阅读 .action{$hours} 小时 .action{$remainMin} 分钟
.action{else}
已阅读 .action{$T} 分钟
.action{end}
这段代码的思路是这样的:先把结束时间减去(Sub)开始时间(返回 Duration),然后再把 Duration 转换为以分钟为单位的数值(Minutes 函数)。接着再用 float64 函数转换成 64 位浮点数值,再对这个数值进行不产生小数点的四舍五入(round 函数)。因为 gt 函数只能接受 int 类型,所以需要进行转换。最后进行一个逻辑运算,根据时间是否超过一小时为准(gt 函数),分成“XX 小时(用 div 整除)XX 分(用 mod 求余)”和“XX 分”两种格式。
“.完成打卡时间”和“.开始打卡时间”根据具体日期列的名称来修改就好了。
如果只需要显示分钟,那用下面这段代码也是一样的。
.action{$duration := .完成打卡时间.Sub .开始打卡时间}
.action{$minutes := $duration.Minutes}
.action{$remainTime := float64 $minutes}
.action{$t := round $remainTime 0}
已阅读 .action{$t} 分钟
显示的效果如下:

最后我发现这个模板列在开关换行的时候,文字会靠上和靠下显示,在群里问完后发现是代码里存在换行。所以如果需要文字靠上来渲染,可以这样:
.action{$minutes := (.完成打卡时间.Sub .开始打卡时间).Minutes}.action{$t := (round (float64 $minutes) 0) | int}.action{if gt $t 60}.action{$hours := div $t 60}.action{$remainMin := mod $t 60}已阅读 .action{$hours} 小时 .action{$remainMin} 分钟.action{else}已阅读 .action{$t} 分钟.action{end}
好了,就分享到这里。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于