插件制作 计算时间戳之间的耗时

在间歇日记时间戳之间插入用时。如:

  • 02:02
    吃饭
  • 10:12
    睡觉
  • 13:13
    洗碗
    触发插件后:
  • 02:02(8h10m)
    吃饭
  • 10:12(3h1m)
    睡觉
  • 13:13
    洗碗
  1. 查找最近的时间戳:这个逻辑保持不变。
  2. 计算时间差:这个也没有变化。
  3. 插入时间差:现在,时间差会被插入在当前光标位置,而不是上一个时间戳后面。
  4. 插入当前时间戳:在当前光标位置的下一行插入当前时间戳。
  5. 更新光标位置:将光标定位到插入的当前时间戳后面。
  6. 保存文件:这个逻辑保持不变。

(无编程知识,问gpt半天,终于弄好了)
创建您的第一个插件 | Obsidian 插件开发文档 (luhaifeng666.github.io)
此此代码由gpt完成

// cd /d D:\GTXXEON\record\daily\obsidian\日记\.obsidian\plugins\obsidian-plugin-dev-vault
// npm run dev


import { App, Editor, MarkdownView, Plugin } from 'obsidian';

export default class TimeDifferencePlugin extends Plugin {
    onload() {
        this.addCommand({
            id: 'calculate-time-difference',
            name: 'Calculate Time Difference',
            editorCallback: (editor: Editor, view: MarkdownView) => {
                this.calculateTimeDifference(editor);
            }
        });
    }

    calculateTimeDifference(editor: Editor) {
        const currentPosition = editor.getCursor();
        const text = editor.getValue();
        const lines = text.split('\n');
        
        let lastTimestampIndex = -1;
        let lastTimestamp = null;

        // 查找最近的时间戳
        for (let i = currentPosition.line; i >= 0; i--) {
            const timeMatch = lines[i].match(/- (\d{2}:\d{2})/);
            if (timeMatch) {
                lastTimestamp = timeMatch[1];
                lastTimestampIndex = i;
                break;
            }
        }

        // 计算时间差并在当前位置插入
        if (lastTimestamp) {
            const currentTime = this.getCurrentTimeFormatted();
            const timeDifference = this.calculateTimeDifferenceFormatted(lastTimestamp, currentTime);

            editor.replaceRange(` **<${timeDifference}>** \n`, currentPosition);

            // 插入格式化的当前时间戳在下一行
            const currentTimeFormatted = `- ${currentTime} <br> `;
            const nextLinePosition = { line: currentPosition.line + 1, ch: 0 };
            editor.replaceRange(currentTimeFormatted + '\n', nextLinePosition);

            // 更新光标位置到插入的当前时间戳行末
            editor.setCursor({ line: currentPosition.line + 1, ch: currentTimeFormatted.length });
        }

        // 修改后保存文件
        this.app.workspace.getActiveFile().save();
    }

    getCurrentTimeFormatted() {
        const now = new Date();
        return now.getHours().toString().padStart(2, '0') + ':' + now.getMinutes().toString().padStart(2, '0');
    }

    calculateTimeDifferenceFormatted(startTime, endTime) {
        const start = this.convertTimeToMinutes(startTime);
        const end = this.convertTimeToMinutes(endTime);
        let diff = end - start;

        if (diff < 0) {
            diff += 24 * 60;
        }

        return this.formatTime(diff);
    }

    convertTimeToMinutes(timeStr) {
        const [hours, minutes] = timeStr.split(':').map(Number);
        return hours * 60 + minutes;
    }

    formatTime(minutes) {
        const hours = Math.floor(minutes / 60);
        const mins = minutes % 60;
        return `${hours.toString().padStart(2, '0')}:${mins.toString().padStart(2, '0')}`;
    }
}

这个gpt还蛮厉害的,感觉大部分都说对了。你需要什么帮助?