time/timestampToDate.js

/**
 * 将 Unix 时间戳转换为 Date 对象。
 * 支持秒级 (10位数字) 和毫秒级 (13位数字) 的 Unix 时间戳。
 * 验证时间戳是否有效,并自动调整精度。
 * @author penn <https://github.com/penn201500>
 * @category time
 * @alias time_timestampToDate
 * @param {number|string} ts - Unix 时间戳。
 * @returns {Date|null} 对应的 Date 对象,如果时间戳无效或格式不正确则返回 null。
 *
 * @example
 * // 示例: 有效的秒级时间戳
 * console.log(time_timestampToDate(1704067200)); // 输出: Date 对象,代表 2024-01-01 00:00:00 UTC
 *
 * @example
 * // 示例: 有效的毫秒级时间戳
 * console.log(time_timestampToDate(1704067200000)); // 输出: Date 对象,代表 2024-01-01 00:00:00 UTC
 *
 * @example
 * // 示例: 无效的时间戳
 * console.log(time_timestampToDate("invalid")); // 输出: null
 */
export default (timestamp) => {
  if (!timestamp || timestamp === null || timestamp === undefined) {
    return null;
  }

  const numericTimestamp = Number(timestamp);

  if (isNaN(numericTimestamp) || numericTimestamp < 0) {
    return null;
  }

  // 处理0、10位和13位时间戳
  if (numericTimestamp === 0 || String(numericTimestamp).length === 10) {
    return new Date(numericTimestamp * 1000);
  } else if (String(numericTimestamp).length === 13) {
    return new Date(numericTimestamp);
  }

  return null;
};