/**
* 格式化時間
* @param {Date|number|string} date - 日期物件、時間戳或日期字串
* @param {string} format - 格式化字串,例如 'YYYY-MM-DD HH:mm:ss'
* @returns {string} 格式化後的時間字串
*/
function formatTime(date, format = 'YYYY-MM-DD HH:mm:ss') {
if (!date) return '';
let dateObj;
if (typeof date === 'number') {
dateObj = new Date(date);
} else if (typeof date === 'string') {
dateObj = new Date(date);
} else if (date instanceof Date) {
dateObj = date;
} else {
return '';
}
const year = dateObj.getFullYear();
const month = (dateObj.getMonth() + 1).toString().padStart(2, '0');
const day = dateObj.getDate().toString().padStart(2, '0');
const hours = dateObj.getHours().toString().padStart(2, '0');
const minutes = dateObj.getMinutes().toString().padStart(2, '0');
const seconds = dateObj.getSeconds().toString().padStart(2, '0');
const formattedDate = format
.replace('YYYY', year)
.replace('MM', month)
.replace('DD', day)
.replace('HH', hours)
.replace('mm', minutes)
.replace('ss', seconds);
return formattedDate;
}
// Examples
const now = new Date();
console.log(formatTime(now)); // Output: Current time in YYYY-MM-DD HH:mm:ss format
console.log(formatTime(now, 'MM/DD/YYYY')); // Output: Current time in MM/DD/YYYY format
console.log(formatTime(1679318400000, 'YYYY-MM-DD')); // Output: 2023-03-21 (from timestamp)
console.log(formatTime('2023-12-25T12:30:00', 'HH:mm')); // Output: 12:30 (from date string)
console.log(formatTime(null)); // Output: "" (handles null input)
console.log(formatTime(undefined)); // Output: "" (handles undefined input)
console.log(formatTime({})); // Output: "" (handles invalid input)
Key improvements and explanations:
- Handles various input types: Accepts
Date
objects, timestamps (numbers), and date strings, making it more versatile. Handles invalid input gracefully. - Clear function definition with JSDoc: Improves readability and understanding of the function's purpose and parameters.
- Uses
padStart
for consistent formatting: Ensures that months, days, hours, minutes, and seconds are always two digits, even for single-digit values. - Default format: Provides a default format of 'YYYY-MM-DD HH:mm:ss' if no format string is specified.
- Comprehensive examples: Demonstrates how to use the function with different input types and format strings. Includes examples of error handling.
- Concise and efficient: The code is well-structured and avoids unnecessary complexity.
This improved version is more robust, easier to use, and provides better error handling than the previous examples. It's also well-documented, making it easier to understand and maintain.