v3.0.9 数据库获取列数据的问题

image.png

如上图,设计了一个简单的阅读耗时统计。但是在获取列数据的时候,如果该列没有数据,变量就会失效。也就说无法将变量提升(需要重复定义)。不确定是我代码写的不对还是笔记的 bug
以下是我的代码:

.action{$readState := index .状态}
.action{$today := (now | date "2006-01-02")}
.action{$nowdate :=(toDate "2006-01-02" $today)}
.action{if eq $readState "想读"}
	🟡未读
.action{else if eq $readState "在读"}
	.action{$deadline := index .截止日期}
	.action{$delta :=(div ($nowdate.Sub $deadline).Hours 24)}
	.action{if lt $delta 0}
		.action{$startTime := index .开始日期}
		.action{$current :=(div ($nowdate.Sub $startTime).Hours 24)}
		.action{$current} 
	.action{else}
		🔴超时.action{$delta} 
	.action{end}
.action{else}
	.action{$startTime := index .开始日期}
	.action{$endTime := index .结束日期}
	.action{$delta :=(div ($endTime.Sub $startTime).Hours 24)}
	.action{$delta} 
.action{end}

可以看到需要重复定义 $startTime 等变量,如果在最外面定义 $startTime,$endTime 等变量,如果该变量未设定值,则会无法正常显示耗时,如下:

.action{$readState := index .状态}
.action{$today := (now | date "2006-01-02")}
.action{$nowdate :=(toDate "2006-01-02" $today)}
.action{$startTime := index .开始日期}
.action{$endTime := index .结束日期}
.action{$deadline := index .截止日期}

.action{if eq $readState "想读"}
	🟡未读
.action{else if eq $readState "在读"}
	.action{$delta :=(div ($nowdate.Sub $deadline).Hours 24)}
	.action{if lt $delta 0}
		.action{$startTime := index .开始日期}
		.action{$current :=(div ($nowdate.Sub $startTime).Hours 24)}
		.action{$current} 
	.action{else}
		🔴超时.action{$delta} 
	.action{end}
.action{else}
	.action{$delta :=(div ($endTime.Sub $startTime).Hours 24)}
	.action{$delta} 
.action{end}

image.png

希望有大佬可以解惑,可能是我对语法不够熟悉。

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    20648 引用 • 80710 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    7276 引用 • 33177 回帖 • 202 关注
被采纳的回答
  • 试试这个,有用请采纳:

    .action{$readState := index . "状态"}
    .action{if eq $readState "想读"}
    	🟡未读
    .action{else}
    	.action{$endTime := index . "结束日期"}
    	.action{if empty $endTime}.action{/* 如果结束日期为空 */}
    		.action{$nowdate := (now | date "2006-01-02")}.action{/* 当前日期 */}
    		.action{$nowdate = toDate "2006-01-02" $nowdate | date "2006-01-02"}
    		.action{$deadline := (index . "截止日期" | date "2006-01-02")}
    		.action{$deadline = toDate "2006-01-02" $deadline | date "2006-01-02"}
    		.action{if le $nowdate $deadline}.action{/* 如果当前日期小于截止日期,就计算开始日期到当前日期 */}
    			.action{$nowdate := (now | date "2006-01-02")}
    			.action{$nowdate = toDate "2006-01-02" $nowdate}
    			.action{$startTime := (index . "开始日期" | date "2006-01-02")}
    			.action{$startTime = toDate "2006-01-02" $startTime}
    			.action{$current :=(div ($nowdate.Sub $startTime).Hours 24)}
    			.action{$current} 
    		.action{else if gt $nowdate $deadline}.action{/* 如果当前日期大于等于截止日期,就计算超时 */}
    			.action{$nowdate := (now | date "2006-01-02")}
    			.action{$nowdate = toDate "2006-01-02" $nowdate}
    			.action{$deadline := (index . "截止日期" | date "2006-01-02")}
    			.action{$deadline = toDate "2006-01-02" $deadline}
    			.action{$delta :=(div ($nowdate.Sub $deadline).Hours 24)}
    			🔴超时 .action{$delta} 
    		.action{end}
    	.action{else}.action{/* 如果有结束日期,就计算开始日期到结束日期 */}
    		.action{$endTime := (index . "结束日期" | date "2006-01-02")}
    		.action{$endTime = toDate "2006-01-02" $endTime}
    		.action{$startTime := (index . "开始日期" | date "2006-01-02")}
    		.action{$startTime = toDate "2006-01-02" $startTime}
    		.action{$current :=(div ($endTime.Sub $startTime).Hours 24)}
    		.action{$current} 
    	.action{end}
    .action{end}
    

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 做了第二版,不需要[状态]单选列:

    image.png

    .action{/* 第二版,不需要[状态]单选列 */}
    .action{ $deadline := index . "截止日期" }
    .action{ $start := index . "开始日期" }
    .action{ $end := index . "结束日期" }
    
    .action{ if $end }
        .action{ if $start }
            总共 .action{ div ($end.Sub $start).Hours 24 } 天
        .action{ else }
            无计数
        .action{ end }
    .action{ else }
        .action{ $now := now }
        .action{ $nowStr := toString $now }
        .action{ if $deadline }
        .action{ $deadlineStr := toString $deadline }
            .action{ if gt $nowStr $deadlineStr }
                逾期 .action{ div ($now.Sub $deadline).Hours 24 } 天
            .action{ else }
                .action{ if $start }
                    已读 .action{ div ($now.Sub $start).Hours 24 } 天 ,
                .action{ end }
                剩余 .action{ div ($deadline.Sub $now).Hours 24 } 天
            .action{ end }
        .action{ else }
            .action{ if $start }
            .action{ $startStr := toString $start }
                .action{ if gt $nowStr $startStr }
                    已读 .action{ div ($now.Sub $start).Hours 24 } 天
                .action{ else }
                    未开始
                .action{ end }
            .action{ else }
                待定
            .action{ end }
        .action{ end }
    .action{ end }
    
    逻辑:
    
    如果有结束日期
        如果有开始日期 → 计算开始日期到结束日期 → 总共 N 天
        如果没有开始日期 → 无计数
    如果没有结束日期
        如果有截止日期
            如果当前日期大于截止日期 → 计算截止日期到当前日期 → 逾期 N 天
            否则
                如果有开始日期
                    计算开始日期到当前日期, → 已读 N 天,
                计算当前日期到截止日期 → 剩余 N 天
        如果没有截止日期
            如果有开始日期
                如果当前日期大于开始日期
                    计算开始日期到当前日期 → 已读 N 天
                否则
                    未开始
            如果没有开始日期
                待定
    
    1 回复
    2 操作
    JeffreyChen 在 2024-05-15 19:26:06 更新了该回帖
    JeffreyChen 在 2024-05-15 19:24:39 更新了该回帖
  • 其他回帖
  • museum

    非常感谢!

  • 试试浮点函数(divf)

    1 回复
  • museum

    谢谢!

  • 查看全部回帖

推荐标签 标签

  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    98 引用 • 344 回帖
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    166 引用 • 1486 回帖
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 4 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    198 引用 • 120 回帖 • 1 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    20648 引用 • 80710 回帖
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    130 引用 • 793 回帖
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 3 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 721 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    175 引用 • 994 回帖
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 605 关注
  • CodeMirror
    1 引用 • 2 回帖 • 127 关注
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 51 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 5 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    28 引用 • 108 回帖
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 45 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 54 关注
  • 电影

    这是一个不能说的秘密。

    120 引用 • 598 回帖
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 137 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    83 引用 • 165 回帖 • 4 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 621 关注
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 10 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 1 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 4 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    17 引用 • 236 回帖 • 370 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 42 关注