dataviewjs 无序列表 记录 时间日志 排序问题

我无法按照 start [开始时间] 对时间日志进行 排序。

const tasks = dv.current().file.lists.map(task => {
    const timeParts = task.text.split(' - ');
    const start = new Date(`1970-01-01T${timeParts[0]}`).getTime(); // 获取start时间对应的时间戳

    const endTime = timeParts[1].split(' ')[0]; // 获取 - 到空格之间的时间作为end时间
    const end = new Date(`1970-01-01T${endTime}`).getTime();

    const taskStartIndex = task.text.indexOf('[[');
    const taskEndIndex = task.text.indexOf(']]', taskStartIndex) + 2;
    const taskContent = task.text.substring(taskStartIndex, taskEndIndex);

    const subStartIndex = task.text.indexOf('[[', taskEndIndex);
    const subEndIndex = task.text.indexOf(']]', subStartIndex) + 2;
    const subContent = task.text.substring(subStartIndex, subEndIndex);

    const description = task.text.substring(subEndIndex).trim();

    const span = (end - start) / (1000 * 60 * 60); // 转换为小时
    return {
        description: description,
        span: span.toFixed(2), // 保留两位小数
        start: timeParts[0],
        end: endTime,
        task: taskContent,
        sub: subContent
    };
});

// 按照start时间戳对任务数组进行排序
tasks.sort((a, b) => new Date(`1970-01-01T${a.start}`).getTime() - new Date(`1970-01-01T${b.start}`).getTime());

dv.table(
    [ "Start", "End", "Span", "Task", "Sub", "Description"],
    tasks.map(task => [
        task.start,
        task.end,
        task.span,
        task.task,
        task.sub,
        task.description
    ])
);

可能性比较多, 不排版在代码块里的话, 有些细节看不出来, new Date(1970-01-01T${a.start}) 之类应该是 new Date(`1970-01-01T${a.start}`) 吧, 看着似乎还正常

问题最可能出在

tasks.sort((a, b) => ... ) 

这里, tasks 是来自 dv.current().file.lists.map( ... ) 但它是个 dv 的 Proxy
实际可以看到, 这个 dv Proxy 对象不能 sort

- 11
- 22b
	- 33
	- 22a

```dataviewjs
let mylist = dv.current().file.lists
dv.span('before')
dv.span(mylist.map(t => t.text))
mylist.sort((a, b) => (a.text < b.text) ? -1 : 1);
dv.span('after')
dv.span(mylist.map(t => t.text))
```

会发现 sort 无效, before after 并没啥变化,
第一句得改 let mylist = dv.current().file.lists.values 才能 sort 生效
或者在后面改 mylist.values.sort 也行

非常感谢,我试试

你这个用的是哪个任务管理插件啊?看起来不错啊。

尝试用 无序列表记录,用dataviewjs 统计,模仿爱时间的方式,应该能实现,但是我的能力太差,好多细节现在搞不定。

哦,好吧,这个图中的圆圈,脚标数字,这是怎么实现的啊?
前面的时间段,比如 16:00-17:00 是手动输入的吗?

image

  1. 圆圈 输入法的emoji
  2. 时间是输入法输入的,可以用quickadd 输入一个简单的模板.
  3. 角标引用的数字。是一个插件