calculate_duration
Determine the duration between two timestamps with precision. Specify start and end times, optional unit, and timezone for accurate results. Ideal for time-based calculations and scheduling.
Instructions
Calculate duration between two times
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| end_time | Yes | End time | |
| start_time | Yes | Start time | |
| timezone | No | Timezone for parsing (default: system timezone) | |
| unit | No | Output unit (default: "auto") |
Implementation Reference
- src/tools/calculateDuration.ts:15-66 (handler)Main handler function for the calculate_duration tool. Parses input times, validates timezone and unit, calculates duration using date-fns differenceInMilliseconds, applies caching, and returns formatted result with all unit breakdowns.export function calculateDuration(params: CalculateDurationParams): CalculateDurationResult { debug.timing('calculateDuration called with params: %O', params); const { start_time, end_time } = params; // Validate string lengths first if (typeof start_time === 'string') { validateDateString(start_time, 'start_time'); } if (typeof end_time === 'string') { validateDateString(end_time, 'end_time'); } const config = getConfig(); const unit = validateUnit(params.unit); const timezone = resolveTimezoneUtil(params.timezone, config.defaultTimezone); // Use withCache wrapper instead of manual cache management return withCache( `duration_${start_time}_${end_time}_${unit}_${timezone}`, CacheTTL.CALCULATIONS, () => { // Validate timezone if (!validateTimezone(timezone)) { debug.error('Invalid timezone: %s', timezone); throw new TimezoneError(`Invalid timezone: ${timezone}`, timezone); } // Parse dates with proper error context const startDate = parseDateWithContext(start_time, timezone, 'start_time'); debug.timing('Parsed start date: %s', startDate.toISOString()); const endDate = parseDateWithContext(end_time, timezone, 'end_time'); debug.timing('Parsed end date: %s', endDate.toISOString()); // Calculate all duration values const values = calculateDurationValues(startDate, endDate); debug.timing('Duration in milliseconds: %d', values.milliseconds); // Format the result const formatted = formatDurationResult(values, unit); debug.timing('Formatted duration: %s', formatted); const result: CalculateDurationResult = { ...values, formatted, }; debug.timing('Returning result: %O', result); return result; } ); }
- src/types/index.ts:78-93 (schema)TypeScript interfaces defining input (CalculateDurationParams) and output (CalculateDurationResult) schemas for the calculate_duration tool.export interface CalculateDurationParams { start_time: string; end_time: string; unit?: string; timezone?: string; } export interface CalculateDurationResult { milliseconds: number; seconds: number; minutes: number; hours: number; days: number; formatted: string; is_negative: boolean; }
- src/index.ts:115-131 (registration)Registration of the calculate_duration tool in TOOL_DEFINITIONS array, including name, description, and input schema.{ name: 'calculate_duration', description: 'Calculate duration between two times', inputSchema: { type: 'object' as const, properties: { start_time: { type: 'string' as const, description: 'Start time' }, end_time: { type: 'string' as const, description: 'End time' }, unit: { type: 'string' as const, description: 'Output unit (default: "auto")' }, timezone: { type: 'string' as const, description: 'Timezone for parsing (default: system timezone)', }, }, required: ['start_time', 'end_time'], }, },
- src/index.ts:264-265 (registration)Mapping of calculate_duration tool name to the calculateDuration handler function in TOOL_FUNCTIONS.calculate_duration: (params: unknown) => calculateDuration(params as Parameters<typeof calculateDuration>[0]),
- Core helper function that computes the duration values across all units using date-fns differenceInMilliseconds.export function calculateDurationValues(startDate: Date, endDate: Date): DurationValues { debug.timing( 'calculateDurationValues called with: start=%s, end=%s', startDate.toISOString(), endDate.toISOString() ); const milliseconds = differenceInMilliseconds(endDate, startDate); const seconds = milliseconds / 1000; const minutes = seconds / 60; const hours = minutes / 60; const days = hours / 24; const is_negative = milliseconds < 0; const result = { milliseconds, seconds, minutes, hours, days, is_negative, }; debug.timing('Calculated duration values: %O', result); return result; }