• 最新
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
  • 太微中文教程
  • 新插件投票看板
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
太微中文论坛icon

太微中文论坛

如何将纪元时间戳转换回 TW 默认格式

已定时 已固定 已锁定 已移动 已解决 讨论
8 帖子 3 发布者 118 浏览
    • 从旧到新
    • 从新到旧
    • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 机杼机 离线
    机杼机 离线
    机杼
    写于 最后由 马萨伊尔 编辑
    #1

    我最近在制作一个插件,我使用了一个字段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>
    

    可以看到,上面的条件判断可以分析出是今天,还是明天还是什么时候。

    这非常方便,因为我们可以做更多的样式处理。

    1 条回复 最后回复
    0
  • 机杼机 离线
    机杼机 离线
    机杼
    写于 最后由 编辑
    #4

    如何将纪元时间戳转换回 TW 默认格式

    我去查了一下论坛,发现早就有讨论过。而当时的pr也已经包含在最新版本中了。那么转换就有可能实现。而这个实现也确实比较不那么TiddlyWiki。代码如下。

    <$let today=<<now "YYYY-0MM-0DD">> 
    	format="[UTC]YYYY-0MM-0DD"
    	oneday={{{ [[24]multiply[60]multiply[60]multiply[1000]] }}}
    	tmoTime={{{ [{!!test}search-replace:g[-],[]format:relativedate[]] }}}
    	nowts=<<now "TIMESTAMP">>
    	aaa={{{ [<nowts>format:timestamp[]] }}}
    	yesterday={{{ [<nowts>subtract<oneday>format:timestamp[]] }}}
    	tomorrow={{{ [<nowts>add<oneday>format:timestamp[]] }}}
    	>
    
    * 现在时间:<$text text={{{ [<aaa>format:date[YYYY-0MM-0DD 0hh: 0mm]] }}} />
    * 昨天时间:<$text text={{{ [<yesterday>format:date[YYYY-0MM-0DD 0hh: 0mm]] }}} />
    * 明天时间:<$text text={{{ [<tomorrow>format:date[YYYY-0MM-0DD 0hh: 0mm]] }}} />
    
    # <<nowts>>
    # 昨天时间 <<yesterday>>
    # 明天时间 <<tomorrow>>
    
    </$let>
    
    

    有几个关键要点

    • now宏竟然能传入TIMESTAMP,这个参数文档里没写
      • 你是怎么发现的,因为我以前也没遇到过
    • 其次转换后timestamp,不需要进行额外处理,因为额外的处理可能会导致不生效
    • 最后需要再把纪元时间戳转换成TiddlyWiki的时间格式
      • 这里可根据需要改变呈现的形式。
    1 条回复 最后回复
    1
  • W 离线
    W 离线
    w6iyes
    写于 最后由 编辑
    #2

    想到一个取巧的办法,不一定对

    <$let today=<<now "YYYY-0MM-0DD">> 
    	format="[UTC]YYYY-0MM-0DD"
    	oneday={{{ [[24]multiply[60]multiply[60]multiply[1000]] }}}
    	tmoTime={{{ [{!!test}search-replace:g[-],[]format:relativedate[]] }}}
    	nowts=<<now "TIMESTAMP">>
    	yesterday={{{ [<nowts>subtract<oneday>format:timestamp<format>] }}}
    	tomorrow={{{ [<nowts>add<oneday>format:timestamp<format>] }}}
    	>
    	 
    # <<today>>
    # <<yesterday>>
    # <<tomorrow>>
    # <<tmoTime>>
    </$let>
    
    1 条回复 最后回复
    0
  • 机杼机 离线
    机杼机 离线
    机杼
    写于 最后由 编辑
    #3

    fea6e6a5-7b3a-4303-bb7f-6db396ca0e0c-image.png

    没有成功。

    这里的问题在于,我们用timestamp转换后的实际数据是1750443974491 ,而这个数据也确实可以转换成日期格式。可以用下面网址查看。

    EpochConverter

    但TiddlyWiki的存储时间格式是[UTC]YYYY0MM0DD0hh0mm0ss0XXX,也就是像20250621182614444这样的数据。

    目前没有提供一个函数,或者筛选器,或者宏之类的工具,可以把前者转换成后者。上面用js写的代码应该做了处理。

    1 条回复 最后回复
    0
  • 机杼机 离线
    机杼机 离线
    机杼
    写于 最后由 编辑
    #4

    如何将纪元时间戳转换回 TW 默认格式

    我去查了一下论坛,发现早就有讨论过。而当时的pr也已经包含在最新版本中了。那么转换就有可能实现。而这个实现也确实比较不那么TiddlyWiki。代码如下。

    <$let today=<<now "YYYY-0MM-0DD">> 
    	format="[UTC]YYYY-0MM-0DD"
    	oneday={{{ [[24]multiply[60]multiply[60]multiply[1000]] }}}
    	tmoTime={{{ [{!!test}search-replace:g[-],[]format:relativedate[]] }}}
    	nowts=<<now "TIMESTAMP">>
    	aaa={{{ [<nowts>format:timestamp[]] }}}
    	yesterday={{{ [<nowts>subtract<oneday>format:timestamp[]] }}}
    	tomorrow={{{ [<nowts>add<oneday>format:timestamp[]] }}}
    	>
    
    * 现在时间:<$text text={{{ [<aaa>format:date[YYYY-0MM-0DD 0hh: 0mm]] }}} />
    * 昨天时间:<$text text={{{ [<yesterday>format:date[YYYY-0MM-0DD 0hh: 0mm]] }}} />
    * 明天时间:<$text text={{{ [<tomorrow>format:date[YYYY-0MM-0DD 0hh: 0mm]] }}} />
    
    # <<nowts>>
    # 昨天时间 <<yesterday>>
    # 明天时间 <<tomorrow>>
    
    </$let>
    
    

    有几个关键要点

    • now宏竟然能传入TIMESTAMP,这个参数文档里没写
      • 你是怎么发现的,因为我以前也没遇到过
    • 其次转换后timestamp,不需要进行额外处理,因为额外的处理可能会导致不生效
    • 最后需要再把纪元时间戳转换成TiddlyWiki的时间格式
      • 这里可根据需要改变呈现的形式。
    1 条回复 最后回复
    1
  • 机杼机 离线
    机杼机 离线
    机杼
    写于 最后由 编辑
    #5

    @linonetwo

    论坛不能改标题吗?我想改成如何将纪元时间戳转换回 TW 默认格式,这样更有针对性。

    马萨伊尔马 1 条回复 最后回复
    0
  • 马萨伊尔马 在线
    马萨伊尔马 在线
    马萨伊尔
    在 中回复了 机杼 最后由 编辑
    #6

    @机杼 改好了,你在1楼会看到编辑标题栏即可。

    机杼机 1 条回复 最后回复
    0
  • W 离线
    W 离线
    w6iyes
    写于 最后由 编辑
    #7

    文档/[[now]]/参数/[[日期格式]]/TIMESTAMP

    看到你找的帖子,没想到:timestamp功能提议者居然就是parsedate的作者本人。

    1 条回复 最后回复
    0
  • 机杼机 离线
    机杼机 离线
    机杼
    在 中回复了 马萨伊尔 最后由 编辑
    #8

    @马萨伊尔 好的,原来是在1楼那里改的嘛,谢谢了。

    1 条回复 最后回复
    0
  • 机杼机 机杼 将这个主题转为问答主题,在
  • 机杼机 机杼 将这个主题标记为已解决,在

  • 登录

  • 没有帐号? 注册

Powered by NodeBB Contributors
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
  • 太微中文教程
  • 新插件投票看板
  • 登录

  • 没有帐号? 注册