SimpleTC 実績値計算2
SimpleTC 実績値計算3
2025/02/14
hh:mm-hh:mm (m) #プロジェクト名 タスク名 プロジェクト名とタスク名の位置は前後する
Obsidian
code:ActualTime.js
<%*
function formatTasks(text) {
const taskRegex = /^(\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; // 翌日にまたがる場合
}
// const hours = Math.floor(durationMinutes / 60);
// const minutes = durationMinutes % 60;
return durationMinutes;
}
return text.replace(taskRegex, (match, startTime, endTime, _existing, _1, _2, taskDescription) => {
const duration = (${calculateDuration(startTime, endTime)});
return ${startTime}-${endTime} ${duration} ${taskDescription};
});
}
// 現在のファイル内容を取得(非同期処理)
const text = tp.file.content;
const result = formatTasks(text);
// エディターに反映
const activeLeaf = app.workspace.activeLeaf;
if (!activeLeaf) {
new Notice('エディターがアクティブではありません');
return;
}
const editor = activeLeaf.view.editor;
editor.setValue(result);
%>
1Writer
code:js
// Regular expression to find tasks that start with time range (hh:mm-hh:mm)
const taskRegex = /^(\d{2}:\d{2})-(\d{2}:\d{2})(\s\((\d+(:\d{1,2})?)\))?\s(.*)$/gm;
// Get all content from the currently edited note
let content = editor.getText();
// Function to calculate the duration in h:mm format
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) {
// Handle cases where the end time is on the next day
durationMinutes += 24 * 60;
}
// const hours = Math.floor(durationMinutes / 60);
// const minutes = durationMinutes % 60;
return ${durationMinutes};
}
// Replace the content with updated tasks
content = content.replace(taskRegex, (match, startTime, endTime, existingDuration, _1, _2, taskDescription) => {
const duration = calculateDuration(startTime, endTime);
return ${startTime}-${endTime} (${duration}) ${taskDescription};
});
// Set the updated content back to the editor
editor.setText(content);