我一直都想把《自控力》里读到的一些东西和思源相结合.但一直没有头绪,最近对模板更熟悉一些了,所以实现了一个挺有意思的功能, 输出你在这个文档中编辑的时长,和中断编辑的时间.
主要思路是,获取今天 0 点的字符串,通过 SQL 获取大于该串的 Block,并按照从小到大排序.
依次,两者之间相减,如果时间小于 15min 进行下一次循环.
如果两者之间的间隔大于 15min,则视为,我分心了,去玩手机或者倒腾其他有意思的东西去了. 然后计算出今天的第一次编辑和上一次编辑之间的时间间隔.
然后再将这一次编辑的时间,记录为 thisBlock
(第一次编辑) 重复上述两两相减的过程.
最后将每一次时间段相加,得到一个总的时长.结果难免会有一点误差,但对于复盘是绰绰有余的.
效果(开小差现场)
下图是调整过 CSS 之后的效果 , 模板生成的是一个带有属性的超级块, 因此调整 CSS 还算是方便.
Templates
.action{/*获取文档的基本信息*/}
.action{$docID:=.id}
.action{$docTitle := .title}
.action{$docBox :=" "}
.action{$docPath := " "}
.action{$docCreated := " "}
.action{$docUpdated := " "}
.action{$getDocInfo := (queryBlocks "SELECT * FROM blocks WHERE id='?' and type='d' " $docID )}
.action{range $v:= $getDocInfo}
.action{$docBox =$v.Box}
.action{$docPath = $v.Path}
.action{$docCreated = toDate "20060102150405" $v.Created | date "2006-01-02"}
.action{$docUpdated = $v.Updated}
.action{end}
.action{/*获取今天的开始时间*/}
.action{$today:=now|date "20060102"}
.action{$today = cat $today "000000"}
.action{$today = nospace $today}
.action{/*定义变量*/}
.action{$firstBlock := " "}
.action{$thisBlock := " "}
.action{$lastBlock := " "}
.action{$duration:= 0.0}
.action{$workHours:= 0.0}
.action{$flag := 0}
.action{/*获取中断时间和总时长*/}
{{{row
.action{$recent_block := (queryBlocks "SELECT * FROM blocks WHERE root_id = '?' and updated >'?' order by updated limit -1 " $docID $today)}
.action{range $index,$v:=$recent_block}
.action{$thisBlock = $v.Updated}
.action{/*获取今天第一个创建的块*/}
.action{if eq $index 0}
.action{$firstBlock = $v.Updated }
.action{$lastBlock = $firstBlock}
.action{else}
.action{$duration:= ((toDate "20060102150405" $thisBlock).Sub (toDate "20060102150405" $lastBlock)).Minutes }
.action{if gt $duration 15.0 }
.action{$flag = 1}
@Interrupted .action{toDate "20060102150405" $firstBlock | date "15:04"} - .action{toDate "20060102150405" $lastBlock | date "15:04"}
.action{$workHours = addf $workHours ((toDate "20060102150405" $lastBlock).Sub (toDate "20060102150405" $firstBlock)).Minutes }
.action{$firstBlock = $thisBlock}
.action{end}
.action{end}
.action{$lastBlock = $thisBlock}
.action{end}
.action{/*如果中途有被打断,输出最后一段时间*/}
.action{if eq $flag 1}
@Interrupted .action{toDate "20060102150405" $firstBlock | date "15:04"} - .action{toDate "20060102150405" $lastBlock | date "15:04"}
.action{end}
.action{$workHours = addf $workHours ((toDate "20060102150405" $lastBlock).Sub (toDate "20060102150405" $firstBlock)).Minutes }
.action{$workHours = (divf ($workHours|int64) 60)| toString }
.action{$workHours = regexFind "\\w*\\.\\w\\w" $workHours}
@Duration .action{now|date "2006-01-02 15:04:05"} | .action{$workHours}h
}}}
{: name="@DocInfo" alias="@Duration" }
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于