发布时间格式化工具函数

发布时间格式化工具函数

概述

本文档介绍了一套用于解析和格式化日期时间字符串的工具函数,旨在提供一种简便的方法来处理日期和时间数据,同时确保在不同设备和时区下的兼容性。

函数说明

parseDateString(dateString)

这个函数用于将一个符合特定格式的日期字符串解析为一个 Date 对象。它首先使用正则表达式来验证输入的字符串是否符合 YYYY-MM-DD HH:MM:SS 的格式。如果匹配成功,它会分别提取并转换年、月、日、时、分、秒的部分,然后创建并返回一个 Date 对象。如果输入的字符串不符合预期格式,函数将尝试直接使用 Date 对象的构造器来解析。

参数
  • dateString (String): 需要解析的日期时间字符串。
返回值
  • Date: 一个 Date 对象,表示输入字符串的日期和时间。
示例
const date = parseDateString("2024-05-06 12:34:56");
console.log(date); // 输出: Mon May 06 2024 12:34:56 GMT+0800 (中国标准时间)

formatPublishTime(createTime)

这个函数用于格式化发布时间,使其更易于阅读。它首先检查传入的时间字符串是否存在,如果不存在则返回空字符串。然后,函数将当前时间转换为北京时间,并计算与发布时间的时间差。根据时间差的不同,函数将返回不同格式的时间表述。

参数
  • createTime (String): 发布时间的日期时间字符串。
返回值
  • String: 格式化后的发布时间字符串。
示例
const formattedTime = formatPublishTime("2024-05-05 12:00:00");
console.log(formattedTime); // 输出: 昨天发布

注意事项

  • parseDateString 函数假定输入的日期时间字符串格式严格遵循 YYYY-MM-DD HH:MM:SS。如果输入的格式不符合预期,函数可能无法正确解析。
  • formatPublishTime 函数在计算时间差时,将当前时间转换为北京时间,这可能会影响到不同时区的用户。
  • 函数中的日期格式化遵循了一定的逻辑,但可能需要根据实际应用场景进行调整。

代码实现

以下是上述函数的具体实现代码:

// 解析日期字符串为Date对象,兼容iOS设备
function parseDateString(dateString) {
  const regex = /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/;
  const match = dateString.match(regex);

  if (match) {
    const year = parseInt(match[1], 10);
    const month = parseInt(match[2], 10) - 1;
    const day = parseInt(match[3], 10);
    const hour = parseInt(match[4], 10);
    const minute = parseInt(match[5], 10);
    const second = parseInt(match[6], 10);
    return new Date(year, month, day, hour, minute, second);
  }
  return new Date(dateString);
}

// 格式化发布时间
export const formatPublishTime = (createTime) => {
  if (!createTime) {
    return '';
  }

  const currentTime = new Date(
    new Date().getTime() + (new Date().getTimezoneOffset() / 60 + 8) * 3600 * 1000
  );
  const publishTime = parseDateString(createTime);

  const timeDiff = Math.floor(currentTime - publishTime / 1000);
  const dayDiff = Math.floor(
    (currentTime.setHours(0, 0, 0, 0) - publishTime.setHours(0, 0, 0, 0)) / 1000 / 60 / 60 / 24
  );

  if (dayDiff === 0) {
    if (timeDiff < 60) {
      return `${timeDiff}秒前`;
    } else if (timeDiff < 3600) {
      const minutes = Math.floor(timeDiff / 60);
      return `${minutes}分钟前`;
    } else {
      const hours = Math.floor(timeDiff / 3600);
      return `${hours}小时前`;
    }
  } else if (dayDiff === 1) {
    return '昨天发布';
  } else if (dayDiff === 2) {
    return '前天发布';
  } else {
    const year = publishTime.getFullYear();
    const month = ('0' + (publishTime.getMonth() + 1)).slice(-2);
    const day = ('0' + publishTime.getDate()).slice(-2);
    return `${year}-${month}-${day}`;
  }
};

结语

通过使用这些工具函数,开发者可以更轻松地处理和展示日期时间信息,为用户提供更准确和友好的时间表述。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/606418.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5月数学进度应该到哪里?听说24更难了,进度要加快吗?

刷一本习题册够吗&#xff1f;刷哪本&#xff1f;什么时候刷&#xff1f; 确实&#xff0c;24考完&#xff0c;大家都发现&#xff0c;没有一本习题册&#xff0c;覆盖了考试的所有知识点。 主流的模拟卷&#xff0c;都没有达到24卷的难度。 如何才能在最短的时间内&#xff…

SpringCloud Config 分布式配置中心

SpringCloud Config 分布式配置中心 概述分布式系统面临的——配置问题ConfigServer的作用 Config服务端配置Config客户端配置 可以有一个非常轻量级的集中式管理来协调这些服务 概述 分布式系统面临的——配置问题 微服务意味着要将单体应用中的业务拆分成一个个字服务&…

极市平台 | 一文详解视觉Transformer模型压缩和加速策略(量化/低秩近似/蒸馏/剪枝)

本文来源公众号“极市平台”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;一文详解视觉Transformer模型压缩和加速策略(量化/低秩近似/蒸馏/剪枝) 作者丨Feiyang Chen等 来源丨AI生成未来 编辑丨极市平台 0 极市导读 本研究…

C/C++ 初级球球大作战练手

效果演示&#xff1a; https://live.csdn.net/v/385490 游戏初始化 #include <stdbool.h> #include<stdio.h> #include<stdlib.h> #include<time.h> #include<graphics.h> #include <algorithm> #include<math.h> #include<mmsy…

【全开源】Java俱乐部系统社区论坛商城系统源码-奔驰奥迪保时捷大众宝马等汽车俱乐部

特色功能&#xff1a; 会员管理与服务&#xff1a;系统支持多种会员身份以及优惠政策的制定&#xff0c;如普通会员、VIP会员、黄金会员等&#xff0c;且可以根据会员等级不同&#xff0c;进行不同的营销策略。此外&#xff0c;还提供了会员信息录入、会员积分管理、消费记录管…

算法学习:递归

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、什么是递归&#xff1f;三、两大基本要素&#x1f3c1; 基线条件&#xff08;Base Case&#xff09;&#x1f501; 递归条件&#xff08;Recursive Case&#xff09;&#x1f4c3; 代码示例&#xff1a;计算斐波…

【PyTorch实战演练】使用CelebA数据集训练DCGAN(深度卷积生成对抗网络)并生成人脸(附完整代码)

文章目录 0. 前言1. CelebA数据集1.1 核心特性与规模1.2 应用与用途1.3 获取方式1.4 数据预处理 2. DCGAN的模型构建2.1 生成器模型2.2 判别器模型 3. DCGAN的模型训练&#xff08;重点&#xff09;3.1 训练参数3.2 模型参数初始化3.3 训练过程 4. 结果展示4.1 loss值变化过程4…

从零开始!学习绘制3D表情的详细指南

在2020 年的苹果全球开发者大会(WWDC)&#xff0c;苹果发布了新的 macOS 11(又名 Big Sur)。其中在UI视觉方面macOS Big Sur 系统最大的变化就是图标上&#xff0c; Big Sur更新了很多新设计风格的 3D应用图标&#xff0c;3D设计的确可以提升UI整体的视觉氛围&#xff0c;并且现…

Linux——socket编程之tcp通信

前言 前面我们学习socket的udp通信&#xff0c;了解到了socket的概念与udp的实现方法&#xff0c;今天我们来学习一下面向连接的tcp通信。 一、tcp套接字创建 UDP和TCP都是通过套接字&#xff08;socket&#xff09;来实现通信的&#xff0c;因此TCP也得使用socket()接口创建…

企业架构领域的天花板——TOGAF证书

TOGAF证书是一项重要的企业架构认证&#xff0c;为专业人士提供了广泛的知识和技能&#xff0c;帮助他们在企业架构领域取得突破。 一、TOGAF证书的重要 提升专业知识和技能&#xff1a;TOGAF证书提供了广泛的企业架构知识和最佳实践&#xff0c;使专业人士能够更好地理解和应…

ESD静电问题 | 电容谐振频率点及选择

静电枪放出的静电属于共模干扰 针对静电整改加电容的时候选择频率在17.5MHz~350MHz区间的电容 【转自微信公众号&#xff1a;韬略科技EMC】

漫画对话 ai翻译

復讐の教科書ーー81 81-1 いい加減吐け&#xff01;&#xff01;冴木&#xff01;&#xff01; 快说吧&#xff01;&#xff01;冴木&#xff01;&#xff01; お前が一連の事件の犯人なんだろ&#xff01;&#xff1f; 你就是连续事件的犯人吧&#xff01;&#xff1f; だか…

elementUI表格table文字不换行

在对应不需要换行的列加上属性&#xff1a;:show-overflow-tooltip"true" 即可

leetcode 1235

leetcode 1235 代码 class Solution { public:int jobScheduling(vector<int>& startTime, vector<int>& endTime, vector<int>& profit) {int n startTime.size();vector<vector<int>> jobs(n);for(int i0; i<n; i){jobs[i] …

CMakeLists.txt语法规则:数学运算 math

一. 简介 前面几篇文章学习了 CMakeLists.txt语法中的一些常用变量&#xff0c;常用命令&#xff0c;双引号的作用。条件判断语句&#xff0c;循环语句等等。 本文简单学习一下 CMakeLists.txt语法中数学运算 match。 二. CMakeLists.txt语法规则&#xff1a;数学运算 math 在…

【动态规划】子数组、子串系列I|最大子数组和|环形子数组的最大和|乘积最大子数组|乘积为正数的最长子数组长度

一、最大子数组和 最大子数组和 算法原理&#xff1a; &#x1f4a1;细节&#xff1a; 1.返回值为dp表每个位置的最大值&#xff0c;而不是只看最后一个位置&#xff0c;因为可能最后一个位置都不选 2.可以直接在填dp表的时候就进行返回值的比较 3.如果初始化选择多开一个位…

Apifox 教程:如何实现跨语言调用(Java、PHP、Python、Go 等)

在一些特定场景下&#xff0c;比如需要在 Apifox 中对文件进行读写、加密、转换格式或者进行其它业务的操作时&#xff0c;仅使用 Apifox 内置的 JS 类库可能无法满足业务需求&#xff0c;这时&#xff0c;就可以借助「外部程序」作为解决方案。 外部程序是保存在「外部程序目…

Tower for Mac:Git管理的新境界

Tower for Mac&#xff0c;让您的Git管理进入新境界&#xff01;这款专为Mac用户打造的Git客户端&#xff0c;凭借其出色的性能和丰富的功能&#xff0c;成为众多开发者的首选工具。 Tower不仅支持常规的Git操作&#xff0c;如提交、推送和拉取&#xff0c;还提供了许多高级功能…

AR人脸美妆SDK解决方案,让妆容更加贴合个人风格

美妆行业正迎来前所未有的变革&#xff0c;为满足企业对高效、精准、创新的美妆技术需求&#xff0c;美摄科技倾力打造了一款企业级AR人脸美妆SDK解决方案&#xff0c;为企业打开美妆领域的新世界大门。 革命性的人脸美妆技术 美摄科技的AR人脸美妆SDK解决方案&#xff0c;不…

攻略:ChatGPT3.5~4.0(中文版)国内无限制免费版(附网址)【2024年5月最新更新】

一、什么是ChatGPT&#xff1f; 1、ChatGPT的全名是Chat Generative Pre-trained Transformer&#xff0c;其中"chat"表示聊天。"GPT"则是由三部分组成&#xff1a;生成式&#xff08;generative&#xff09;意味着具有创造力&#xff1b;预训练&#xff0…
最新文章