前端开发中,处理时间戳是一个常见的任务,原生的JavaScript日期对象在处理时间戳时存在一些痛点,开发者们就在不断地寻找更简便、更有效的方法来管理和操作时间戳。而Day.js,正是一个为此问题而生的解决方案。
为了解决这些问题,Day.js应运而生。Day.js是一个轻量级的JavaScript日期库,它提供了简单、灵活和易于使用的API,解决了前端处理时间戳的痛点。
使用Day.js非常简单。首先,我们需要安装:
npm install dayjs
下面是使用的例子:
// 引入
import dayjs from 'dayjs'
// 输出当前日期和时间
const now = dayjs()
console.log(now)
// 输出当前日期的格式化结果,例如:2023-11-14
const formattedDate = dayjs().format('YYYY-MM-DD')
console.log(formattedDate)
// 输出当前时间的时间戳,以毫秒为单位
const timestamp = dayjs().valueOf()
console.log(timestamp)
// 输出明天的日期和时间
const tomorrow = dayjs().add(1, 'day')
console.log(tomorrow)
// 输出一个布尔值,表示给定日期是否在当前日期之后
const isAfter = dayjs('2023-11-15').isAfter(dayjs())
console.log(isAfter)
总结起来,Day.js是一个轻量级、简单易用且功能强大的JavaScript日期库,它解决了前端处理时间戳的痛点。通过提供简洁的API和丰富的功能,Day.js使得处理日期和时间变得简单而直观。如果在前端开发中需要处理时间戳,不妨尝试使用Day.js来提升开发效率和用户体验。
.什么是时间戳?
时间戳是字符或编码信息的序列,用于标识何时发生特定事件,通常给出日期和时间,有时精确到几分之一秒。 该术语源自办公室中使用的橡皮图章,用于在纸质文档上用墨水在当前日期和时间上加盖戳记,以记录接收文档的时间。 此类时间戳的常见用例是在纸质信件上的邮戳或考勤打卡纸上的“入”和“出”时间。在现代,该术语的使用已扩展为指附加到数字数据的数字日期和时间信息。 例如,计算机文件包含时间戳,该时间戳指示文件的最后修改时间,数码相机将时间戳添加到所拍摄的照片中,记录拍摄日期和时间。
对于电子商务应用,如电子合同签署、电子文档签名等,都需要一个能证明合同签署时间和文档签名时间的可信证明,但是由于用户桌面电脑或手机或者服务器时间是可以随意修改的,如果签署合同和文档时用这些不可信的时间,则无法保证合同的签署时间可信。因此合同签署和文档签名需要一个权威第三方来提供可信赖的且不可抵赖的时间戳服务。
2.密信时间戳服务工作原理
密信(MeSign)App提供的电子文档数字签名服务免费为用户配套提供Adobe全球信任的时间戳服务,密信时间戳服务符合RFC3161国际标准和相应的国家标准。时间戳服务就是将经过时间戳服务器签名的一个可信赖的日期和时间与特定电子数据绑定在一起,为PDF签名应用提供可信的时间证明。 其工作原理示意图如下左图所示,用户对待签名文件生成摘要数据,并把此数据提交给时间戳服务器请求签名,时间戳服务器对摘要数据和一个
来自权威时间源的一个日期/时间记录进行签名,生成时间戳签名数据返回给签名工具,签名工具把此时间戳数据写入到待签名的PDF文件即完成时间戳签名。密信时间戳服务时间源来自国家授时中心可靠计时系统。
用户在使用密信App的电子签名服务数字签名文档和签署电子合同时,密信App自动调用密信时间戳服务并自动把时间戳签名数据同文件签名数据和LTV数据一起按照国际标准写入到待签名的PDF文件中完成PDF文件数字签名。用户无需手动配置时间戳服务网址,无需另外花钱购买时间戳服务,使用密信App完成数字签名的时间戳服务完全免费和完全全自动。
3.使用密信App签名的文档的时间戳是什么样的?
如下左图所示,使用密信(MeSign)App签名的文档使用Adobe阅读器打开后显示的详细时间戳信息,显示时间戳颁发机构为 MeSign Time Stamping Signer。如下中图所示,Adobe阅读器显示的签名有效性小结信息,显示“签名包含嵌入的时间戳”和“安全时间戳时间已验证”,表明此文档采用了Adobe全球信任的时间戳服务。如下右图所示,点击Adobe阅读器左边的签名图标也会显示此签名包含嵌入的时间戳。
为了确保所有已签名PDF文件的时间戳签名全球信任和国密合规,密信技术独创了双算法证书双时间戳签名技术,自动对待签名的同一个PDF文件用RSA和SM2算法计算两份摘要(HASH)数据,并分别用RSA时间戳证书和SM2时间戳证书实现双时间戳签名,再把这两个时间戳签名数据写入到PDF文件中,完成双证书双时间戳签名,确保用户使用Adobe阅读器显示RSA时间戳签名信息和国密阅读器显示国密时间戳签名信息,只有这样,才能真正满足Adobe全球信任和国密合规的双标准要求,才能真正实现已签署合同和文件的全球范围具有法律效力。
使用Adobe阅读器打开上面已下载的已签名样板文件,查看时间戳签名信息和显示的效果如下左图所示。而使用支持国密算法的 密信阅读器(内测版)打开此文件,查看时间戳签名信息和显示的效果如下图右图所示。从这个样板文件的两个时间戳时间对比可以看出,密信App文档签名时先用国密时间戳证书签名后用RSA时间戳签名。
密信可信时间戳免费试用搜索:密信MeSign
试用地址:https://www.mesign.com/zh-cn/tsa/index.html
例:倒计时
案例分析:
1.这个倒计时是不断变化的,因此需要定时器来自动变化(setInterval)
2.三个黑色盒子里面分别存放时分秒
3.三个黑色盒子利用innerHTML放入计算的小时分钟秒数
4.第一次执行也是间隔毫秒数,因此刚刷新页面会有空白
5.最好采取封装函数的方式,这样可以先调用一次这个函数,防止刚开始刷新页面有空白问题。
倒计时的算法:
1.核心算法:输入的时间减去现在的时间就是剩余的时间,即倒计时,但是不能拿着时分秒相减,比如05分减去25分,
结果会是负数的
2.用时间戳来做,用户输入时间总的毫秒数减去现在时间的总的毫秒数,得到的就是剩余时间的毫秒数.
3.把剩余时间总的毫秒数转换为天、时、分、秒、(时间戳转换为时分秒)*/
//转换公式如下:
/*d = parseInt(总秒数/60/60/24); //计算天数
h = parseInt(总秒数/60/60%24); //计算小时
m = parseInt(总秒数/60%24); //计算分钟
s = parseInt(总秒数%60); //计算当前秒数*/
function conus(time){
var dqtime = +new Date(time);
var zqtime = +new Date();
var times = (dqtime - zqtime) / 1000;
var t = parseInt(times / 60 / 60 / 24);//天
t = t < 10 ? '0' + t:t;
var s = parseInt(times / 60 / 60 % 24);//时
s = s < 10 ? '0' + s:s;
var f = parseInt(times / 60 % 60);//分
f = f < 10 ? '0' + f:f;
var m = parseInt(times % 60);//秒
m = m < 10 ? '0' + m:m;
return t + '天' + s + '时' + f + '分' + m + '秒';
}
console.log(conus('2022-6-7 12:00:00'));
源码如下
*请认真填写需求信息,我们会在24小时内与您取得联系。