我最近在制作一个插件,我使用了一个字段tmo_dueDate,值为2025-06-19,格式一类的。但现在有一个问题,我想要根据这个字段值判断与当前日期的时间,如果是今天则展示为今天,如果是明天则提示成明天,如果是两个月后则显示为两个月后。
因为TiddlyWiki是按YYYY0MM0DD0hh0mm0ss0XXX的形式处理字符串的。社区目前有两个插件,一个是Date Picker plugin,一个是根据Projectify改编而来的Pikaday。两者都是基于pikaday库。前者功能强大,但年代久远,是好几年前的插件了。后者比较新,且kookma应该会一直维护。但后者也不好调整,只能限定字段为due,且存储的值也是一长串数字,类似于created一长串的值。因而我也不想采用。
因而大胡子搞了一个小工具可以进行转换。
TiddlyTools/Time/ParseDate
虽然也是两三年前的代码了,但我测试后可以在5.3.6版本中使用。
将上面的代码导入wiki后,要刷新一下加载js文件。
新建一个条目,名称随意,新建一个字段test,值为2025-06-19格式的。并把下面的代码放在正文中。
<$let today=<<now "YYYY-0MM-0DD">> format="[UTC]YYYY-0MM-0DD"
oneday={{{ [[24]multiply[60]multiply[60]multiply[1000]] }}}
yesterday={{{ [<today>parsedate[unixtime]subtract<oneday>parsedate:unixtime<format>] }}}
tomorrow={{{ [<today>parsedate[unixtime]add<oneday>parsedate:unixtime<format>] }}}
tmoTime={{{ [{!!test}parsedate[YYYY0MM0DD0hh0mm0ss0XXX]format:relativedate[YYYY-0MM-0DD]] }}}>
<<yesterday>>
<<tomorrow>>
<%if [{!!test}match<yesterday>] %>
昨天
<%elseif [{!!test}match<tomorrow>] %>
明天
<%elseif [{!!test}match<today>] %>
今天
<%else%>
<$text text=<<tmoTime>> />
<%endif%>
</$let>
可以看到,上面的条件判断可以分析出是今天,还是明天还是什么时候。
这非常方便,因为我们可以做更多的样式处理。