首页 > 其他分享 >写一个方法将UTC时间和北京时间换算

写一个方法将UTC时间和北京时间换算

时间:2024-12-12 09:09:22浏览次数:5  
标签:UTC console utc beijing 换算 时间 Date let

/**
 * UTC时间和北京时间互相转换
 * @param {Date | string} time - 需要转换的时间,可以是Date对象或时间字符串
 * @param {string} from - 原始时区,'utc' 或 'beijing'
 * @param {string} to - 目标时区,'utc' 或 'beijing'
 * @returns {Date} 转换后的时间,如果输入无效则返回null
 */
function convertTime(time, from, to) {
  if (!time || !from || !to) {
    console.error("缺少参数");
    return null;
  }

  from = from.toLowerCase();
  to = to.toLowerCase();

  if ((from !== 'utc' && from !== 'beijing') || (to !== 'utc' && to !== 'beijing')) {
    console.error("时区参数无效,必须是 'utc' 或 'beijing'");
    return null;
  }

  let date = time;
  if (typeof time === 'string') {
    date = new Date(time);
  }

  if (isNaN(date.getTime())) {
    console.error("无效的时间格式");
    return null;
  }

  let offset = 8 * 60 * 60 * 1000; // 北京时间比UTC时间早8小时

  if (from === 'utc' && to === 'beijing') {
    return new Date(date.getTime() + offset);
  } else if (from === 'beijing' && to === 'utc') {
    return new Date(date.getTime() - offset);
  } else {
    return new Date(date.getTime()); // 同一时区,直接返回
  }
}


// 使用示例:

// 1. UTC时间转换为北京时间
let utcTime = new Date('2024-11-20T10:00:00Z'); // UTC时间
let beijingTime = convertTime(utcTime, 'utc', 'beijing');
console.log("UTC:", utcTime.toISOString());
console.log("Beijing:", beijingTime.toLocaleString('zh-CN'));


// 2. 北京时间转换为UTC时间
let beijingTime2 = new Date('2024-11-20 18:00:00'); // 北京时间
let utcTime2 = convertTime(beijingTime2, 'beijing', 'utc');
console.log("Beijing:", beijingTime2.toLocaleString('zh-CN'));
console.log("UTC:", utcTime2.toISOString());

// 3. 字符串时间转换
let utcTimeString = "2024-11-20T10:00:00Z";
let beijingTime3 = convertTime(utcTimeString, 'utc', 'beijing');
console.log("UTC String:", utcTimeString);
console.log("Beijing:", beijingTime3.toLocaleString('zh-CN'));


// 4. 处理无效输入
let invalidTime = convertTime("invalid date", 'utc', 'beijing'); // 无效的时间字符串
console.log("Invalid Time:", invalidTime); // 输出 null

let missingParam = convertTime(new Date(), 'utc'); // 缺少参数
console.log("Missing Param:", missingParam); // 输出 null

let invalidTimezone = convertTime(new Date(), 'utc', 'london'); // 无效的时区
console.log("Invalid Timezone:", invalidTimezone); // 输出 null


改进说明:

  • 更清晰的参数命名和注释: 使用fromto更清晰地表达了时区转换的方向。 增加了详细的JSDoc注释,方便理解参数和返回值。
  • 错误处理: 增加了对无效时间格式、缺少参数和无效时区的处理,提高了代码的健壮性。
  • 支持字符串输入: 现在可以接受日期字符串作为输入,并尝试将其转换为Date对象。
  • 直接返回相同时间: 如果fromto相同,则直接返回原始时间,避免了不必要的计算。
  • 使用toLocaleString() for Beijing Time: 使用toLocaleString('zh-CN') 以更符合中国本地习惯的方式显示北京时间。
  • 更全面的示例: 增加了更多示例,演示了不同类型的输入和错误处理。

这个改进版本更加健壮、易用,并且提供了更清晰的错误信息,更适合在实际项目中使用。

标签:UTC,console,utc,beijing,换算,时间,Date,let
From: https://www.cnblogs.com/ai888/p/18601430

相关文章

  • 【深基2.例10】小鱼的游泳时间
    题目描述伦敦奥运会要到了,小鱼在拼命练习游泳准备参加游泳比赛,可怜的小鱼并不知道鱼类是不能参加人类的奥运会的。这一天,小鱼给自己的游泳时间做了精确的计时(本题中的计时都按24小时制计算),它发现自己从a时b分一直游泳到当天的c时d分,请你帮小鱼计算一下,它这天一共游了多少时间......
  • 10位时间戳、13位时间戳以及17位时间戳在JS中的格式转换
    目录目录目录一、介绍1、10位时间戳2、13位时间戳3、17位时间戳二、13位时间戳的转换1、获取当前时间的13位时间戳2、转换成标准日期3、转换成格式化日期三、10位时间戳的转换1、获取当前时间的10位时间戳2、转换成标准日期3、转换成格式化日期四、17位时间戳的转换一、介绍1、......
  • 如何利用甘特图进行项目时间管理?5个技巧轻松上手
    甘特图是一种常用的项目管理工具,能够帮助你可视化项目的时间线、任务进度和资源分配,进而有效地进行时间管理。通过合理的使用甘特图,你可以更清晰地掌握项目的进展,识别潜在的瓶颈,并确保项目按时完成。下面是5个技巧,帮助你轻松上手利用甘特图进行项目时间管理:1.定义项目的关键任......
  • 时间序列预测的不确定性区间估计:基于EnbPI的方法与应用研究
    在现代预测分析领域,准确评估预测结果的不确定性已成为一个关键挑战。预测的不确定性量化不仅能够提供更可靠的决策支持,还能深入揭示模型的预测能力边界。本文聚焦于时间序列预测中的不确定性量化问题,重点探讨基于一致性预测理论的集成批量预测区间(EnsembleBatchPredictionInter......
  • 在 Java 中,要处理 未知的输入格式(可能是日期字符串或时间戳字符串),统一返回日期对象。
    在Java中,要处理未知的输入格式(可能是日期字符串或时间戳字符串),可以通过以下步骤实现:判断输入是日期字符串还是时间戳字符串。如果是全数字组成的字符串,可以尝试将其解析为时间戳。否则,按照支持的日期格式解析。支持多种日期格式。定义常见日期格式的数组,逐一尝试解......
  • 时间序列数据预测分类算法
    1.时间序列基础概念定义与特征时间序列数据是一系列按时间顺序排列的观测值,反映了系统随时间变化的状态。其关键特征包括季节性、趋势性和周期性,分别体现数据随时间呈现的规律性波动、长期发展方向和固定周期内的变化模式。时间序列分析旨在揭示这些内在特性,为预测建模......
  • RTL 时间的处理
    有关时间的内容应该被拆分为两部分:硬件和库环境 在使用nemu时,硬件部分由nemu充当,在nemu里对时间的处理如下:首先查看/nemu/src/device/timer.c,staticvoidrtc_io_handler(uint32_toffset,intlen,boolis_write){assert(offset==0||offset==4);if(!is_write......
  • WSUS(Windows Server Update Services)在管理和分发更新时,随着时间的推移和更新数据量的
    WSUS(WindowsServerUpdateServices)在管理和分发更新时,随着时间的推移和更新数据量的增加,确实可能遇到性能瓶颈,尤其是在客户端数量较多时。即使客户端数量相对较少,但如果没有有效的优化,依然会导致服务崩溃、SQL数据库膨胀等问题。你已经采取了减少同步产品类型的措施,但仍然遇到......
  • 【风光不确定】基于多时间尺度滚动优化算法的主动配电网研究【IEEE33节点】(Matlab代码
    目录......
  • 时间管理
    有效地使用时间减少时间的浪费保持井然有序的工作环境有效建立人脉:人脉的建立在人与人之间互相帮忙的时候。合并可同时进行的工作流程。会议前充分了解,进行有效的会议。Mail内容要简介明了。参考条列式。当面沟通并留下会议记录。适度休息。做对的事情厘清目标与需......