跳转至内容
  • 最新
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
  • 太微中文教程
  • 新插件投票看板
皮肤
  • 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

太微中文论坛

  1. 首页信息流
  2. 版块
  3. 讨论
  4. 如何将纪元时间戳转换回 TW 默认格式

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

已定时 已固定 已锁定 已移动 已解决 讨论
8 帖子 3 发布者 28 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 机杼机 离线
    机杼机 离线
    机杼
    编写 最后由 马萨伊尔 编辑
    #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
                    • 最新
                    • 版块
                    • 标签
                    • 热门
                    • 用户
                    • 群组
                    • 太微中文教程
                    • 新插件投票看板