ActualTime
Obsidian用
チェックリスト対応
code:js
<%*
function formatTasks(text) {
const taskRegex = /^(-\s*\[\sxX\]\s*|-\s*)?(\d{2}:\d{2})-(\d{2}:\d{2})(\s\((\d+(:\d{2})?)\))?\s(.*)$/gm;
function calculateDuration(startTime, endTime) {
const startHour, startMinute = startTime.split(':').map(Number);
const endHour, endMinute = endTime.split(':').map(Number);
let durationMinutes = (endHour * 60 + endMinute) - (startHour * 60 + startMinute);
if (durationMinutes < 0) {
durationMinutes += 24 * 60; // 翌日にまたがる場合
}
return durationMinutes;
}
return text.replace(taskRegex, (match, prefix, startTime, endTime, _existing, _1, _2, taskDescription) => {
const duration = (${calculateDuration(startTime, endTime)});
const formatted_prefix = prefix ? prefix || "" : "";
return ${formatted_prefix}${startTime}-${endTime} ${duration} ${taskDescription};
});
}
const editor = app.workspace.activeLeaf.view.editor;
// 現在のカーソル行を取得
const cursorLine = editor.getCursor().line;
// 現在のファイル内容を取得
const text = tp.file.content;
// 実績時間を追加
const result = formatTasks(text);
// 現在のファイル内容を上書き
editor.setValue(result);
// カーソル位置を戻す
// const currentLineText = editor.getLine(cursorLine);
// const cursorPosition = currentLineText.length;
// editor.setCursor({ line: cursorLine, ch: cursorPosition });
%>