#!/usr/bin/env bash # date_utils.sh - Cross-platform date utility functions # Provides consistent date formatting and arithmetic across GNU (Linux) and BSD (macOS) systems # Get current timestamp in ISO 8601 format with seconds precision # Returns: YYYY-MM-DDTHH:MM:SS+00:00 format get_iso_timestamp() { local os_type os_type=$(uname) if [[ "$os_type" == "Darwin" ]]; then # macOS (BSD date) # Use manual formatting and add colon to timezone offset date -u +"%Y-%m-%dT%H:%M:%S%z" | sed 's/\(..\)$/:\1/' else # Linux (GNU date) - use -u flag for UTC date -u -Iseconds fi } # Get time component (HH:MM:SS) for one hour from now # Returns: HH:MM:SS format get_next_hour_time() { local os_type os_type=$(uname) if [[ "$os_type" == "Darwin" ]]; then # macOS (BSD date) - use -v flag for date arithmetic date -v+1H '+%H:%M:%S' else # Linux (GNU date) - use -d flag for date arithmetic date -d '+1 hour' '+%H:%M:%S' fi } # Get current timestamp in a basic format (fallback) # Returns: YYYY-MM-DD HH:MM:SS format get_basic_timestamp() { date '+%Y-%m-%d %H:%M:%S' } # Get current Unix epoch time in seconds # Returns: Integer seconds since 1970-01-01 00:00:00 UTC get_epoch_seconds() { date +%s } # Export functions for use in other scripts export -f get_iso_timestamp export -f get_next_hour_time export -f get_basic_timestamp export -f get_epoch_seconds