npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

notime

v1.2.6

Published

A js lib,for date,time, format,timezone,etc , support for no limit time.i,hope

Readme

notime

A js lib,for date,time, format,timezone,etc , support for no limit time.i,hope

是一个小的js的时间处理工具库,可用来处理极大或极久远的时间,精确到毫秒。或可用来格式化时间,转化时间,初始化时间,获取时间,记录时间的间隔,进行时区的时间转换等

Email: [email protected]


使用:


var nt = require('notime');  // node require进去

//获取当前时间
nt.getnowts();
//得到一个json对象如下:
/*
{ 
    strts: '1500017861106',
    numts: 1500017861106,
    objts:{ 
      yy: '2017',
      mm: '07',
      dd: '14',
      hh: '15',
      mi: '37',
      ss: '41',
      ms: '106'
    } 
}
*/

// 得到当前时间戳 
// 10位 unix秒的时间戳
console.log(
	nt.getnowts().strts.substr(0,10)  /* '1500618707' */
);
// 13位 毫秒计数的时间戳
console.log(
    nt.getnowts().strts  /* '1500618707330' */
);


// 将时间戳转化指定格式的字符串

// 1500618707330 -> 2017-07-21 14:31:47:330
console.log(
	nt.strtstotext('1500618707330')
);

// 1500618707330 -> 2017-07-21
console.log(
	nt.strtstotext('1500618707330',{hh:false,mi:false,ss:false,ms:false})
);

// 1500618707330 -> 14:31
console.log(
	nt.strtstotext('1500618707330',{yy:false,mm:false,dd:false,ss:false,ms:false})
);
//...

// 将常用的时间形式转换为时间戳
// 2017-07-21 -> 1500566400000
console.log(
	nt.convts('2017-07-21').strts
);

// 2017-07-21 14:31:47 -> 1500618707000
console.log(
	nt.convts('2017-07-21 14:31:47').strts
);
// ...

//將 4分30秒转化为毫秒数
// {mi:'04',ss:'30'} -> 270000
console.log(
	nt.rolltoms({mi:'04',ss:'30'})
);
//...

// 把毫秒转化为时长
// 3456532243 -> { yy:'0000', mm:'01', dd:'10', hh:'00', mi:'08', ss:'52', ms:'243' }
console.log(
	nt.msconv('3456532243')
);
// 得到多少天
// 3456532243 (ms) -> 40 (天)
console.log(
	nt.msconvto('3456532243','dd').cnt
);

// 把时间进行时区换算
// 东一区 2017-05-01 10:30  ->  东八区 2017-05-01 17:30
nt.tzset('E1');
var e1ts = nt.convts('2017-05-01 10:30').strts;
nt.tzset('E8');
var e8time = nt.strtstotext(e1ts,{ss:false,ms:false});
console.log(e8time); // 2017-05-01 17:30
// ...

// 极长和极早的时间支持
// 53917-07-21 10:30:50 -> 1639305138650000
console.log(
	nt.convts('53917-07-21 10:30:50').strts
);

// -54830513865000 -> 232-06-28 21:42:15
console.log(
	nt.strtstotext('-54830513865000',{ms:false})
);


// 得到昨天 24小时之前的时间
var yesterdayts = nt.timeminus( nt.getnowts().strts, nt.rolltoms({dd:'1'}) ); 
console.log(
	nt.strtstotext( yesterdayts)
);

// 得到最近n天的日期 
function lastnday(n) {
	var cuts = nt.getnowts().strts;
	var ts, str, arr = [], cuday;
	for(var i = 1;i<=n;i++ ){
		cuday = i.toString();
		ts = nt.timeminus( cuts, nt.rolltoms({dd: cuday}) );
		str = nt.strtstotext( ts,{hh:false,mi:false,ss:false,ms:false} );
		arr.push(str);
	}
	return arr;
}

// 最近一周的日期的数组
console.log( lastnday(7) );
/*
[ 
'2017-07-20',  '2017-07-19',  '2017-07-18',  
'2017-07-17',  '2017-07-16',  '2017-07-15',  '2017-07-14' 
]
*/

// 最近30天的日期的数组
console.log( lastnday(30) );
// ...

详情参见utest.js

note:

  • broswer-version: 纯js在页面前端使用可引用单文件 notime-broswer.js
  • node-version: 在nodejs服务器端使用notime.js require('notime')
  • 在es6里使用: 可引入 notime-es6.js
    ( // 当然一般来说因为前端的一些打包工具的原因,也可以直接 :
> npm i notime  (npm命令行安装)
import notime from 'notime'  //页面内使用
notime.getnowts()  // ... 


方法索引:


逻辑结构:

定义了4种时间模型,包括3种通用模型和1种自然语言模型,模型精确到毫秒

1.objts: (对象形式)

{
  yy:numstr,
  mm:numstr,
  dd:numstr,
  hh:numstr,
  mi:numstr,
  ss:numstr,
  ms:numstr
}

由于js使用53个2进制为存储整数部分,使用IEEE754双精度浮点数标准,所以数字的范围为js最大的安全整数范围:即: Number.MAX_SAFE_INTEGER +-/9007199254740991 ( (2^53)-1 )

但这里并没有这个限制,因为键值是数字的字符串形式 其中月份(mm)的范围是01-12 天数(dd)的范围是01-31

2.strts (字符串形式)

"12312123123222222222222223334444..." 

一个字符串,存储从unix纪元1970年1月1日起的毫秒数,字符串的长度理论上不受限制,可用来表示和用于极大的数字时间,不受固定位长的数字类型的限制

3.numts (数字形式) 纯数字,同strts一样表示毫秒数时间戳,但有范围,即+-/9007199254740991 (285,616.414年+1970) 约28万年 自1970年1月1日加上或减去273785年的时间

4.自然语言模型 (字符串形式)
包括以下几个例子

2010-10-10
2010-10-10 10:12 
2010-10-10 10:12:12 
2010-10-10 10:12:12:233

定义了几类方法和一个角度,来操作和处理上述的四种模型

1.获取和重置当前时间:

getnowts
resetnow

2.自然语言时间模型和通用模型之间的转换

convts
strtstotext
objtstotext
numtstotext

3.通用时间模型之间的转换

objtostrts
strtoobjts
numtostrts

4.时间的操作和运算

timeplus: 处理一段时间的计算 strts + 一定毫秒数 返回strts对象
timeminus: 处理一段时间的计算 strts - 一定毫秒数 返回strts对象
timespace: 处理一段时间的计算 strts与strts 返回它们之间相距的时间距离毫秒数
msconv:  处理一段时间的计算 将一定毫秒数 转化为多少年多少月..几时几分几秒 返回 一个对象
msconvto: 处理一段时间的计算 将一定毫秒数 转化为xx天 或者 xx秒等
rolltoms: 处理一段时间的计算 将多少天 多少小时 转化为多少毫秒数

5.一个角度 时区:对于自然语言时间模型的概念会有一个时区设置方法,以输出多角度的当前时间模型,有以下3个方式设置时区角度 默认时区: 东八区,北京,480

tzset  E1-E12 W1-W12 WE0  25个时区范围东1到东12区,西1到西12区
tzmiset 设置与GMT时间的偏移分钟数 +/-480
tzcityset  设置以某个城市拼写所在的时区为准,

支持以下城市:

tzcityset :查看支持城市

此外还有一些透明的辅助工具方法,被以上这些暴露出去的使用方法所调用。 统一归纳在util对象下实现:

bnplus   大数加法
bnminus  大数减法
bnmultip 大数乘法
bndivis  大数除法
bnmod    大数取余
bnisnega    判断是否是负数
bnabscomp   比较两数的绝对值大小

API

getnowts

方法描述:用来获取当前时间,返回1个json对象,里面有3种格式的当前时间(strts,numts,objts)

输入: 无输入参数

输出:

{ strts: '1503989677195',
  numts: 1503989677195,
  objts: {
    yy: '2017',
    mm: '08',
    dd: '29',
    hh: '14',
    mi: '54',
    ss: '37',
    ms: '195' 
  } 
}

resetnow

用来重置当前时间,一旦设定该项后,会启用内置的定时器,每隔500ms更新一次getnowts获取到的当前时间,默认getnowts获取当前时间使用的js的new Date(); 若调用过该方法重置后,则会使用重置的时间为起点自动更新当前时间

输入: '1503989677195'

无输出

convts

用来将输入的,或者人类便于理解的自然语言格式的时间字符串转化为3种通用的时间模型(strts,numts,objts) 支持以下4种格式的字符串

输入:

    2010-10-10
    2010-10-10 10:12 
    2010-10-10 10:12:12 
    2010-10-10 10:12:12:233
    

格式:年:1位或1位以上 月:01-12或者1-12都可以 日:01-31 或者1-31 时:01-23或者1-23 分秒:01-59或者1-59 毫秒:01-999或者1-999

输出:

{
  objts:{ 
    yy: '2010',
    mm: '01',
    dd: '10',
    hh: '00',
    mi: '00',
    ss: '00',
    ms: '000'
  },
  strts: '1263139200000',
  numts: 1263139200000
}
// 或者格式不对 返回 'no'

strtstotext

用来将给出的strts 转化为想要的便于人类理解的字符串时间格式,该方法接收2个参数,一个必填参数和一个可选的参数对象,用来定制输出字符串的格式

输入: 参数1: strts: "2342432423423432432"

参数2: format: {yy:true,mm:true,dd:true,hh:true,mi:true,ss:true,ms:true,ymdf:'-',hmsf:':'}

yy:true/false 表示是否输出年份 //年份可能是4位或以上 ymdf: 表示年月日之间的分隔符采用什么 hmsf: 表示时分秒毫秒之间的分隔符采用什么

返回:形如: "2010-10-10 10:12:12:233" 之类的格式

objtstotext

用来将给出的objts 转化为想要的便于人类理解的字符串时间格式,该方法接收2个参数,一个必填参数和一个可选的参数对象,用来定制输出字符串的格式

参数1: objts: {yy:1995,mm:1,dd:20,hh:12,mi:30,ss:59,ms:0}

参数2: format: 默认值: {yy:true,mm:true,dd:true,hh:true,mi:true,ss:true,ms:true,ymdf:'-',hmsf:':'}

yy:true/false 表示是否输出年份 //年份可能是4位或以上 ymdf: 表示年月日之间的分隔符采用什么 hmsf: 表示时分秒毫秒之间的分隔符采用什么 mm,dd,hh,mi,ss,ms可以为'03'-xx 或'0'-xxx或0-xxx

返回:形如: "2010-10-10 10:12:12:233" "2010-10-10 10:12:12:003" 之类的格式

numtstotext

同上的strtstotext方法,只是传的第一个参数是一个数字 该方法实现采用js原生的Date对象实现,理论上处理速度应该会更快一点

objtostrts

将 objts 转换为 strts

输入:

{
  yy: '2010',
  mm: '01',
  dd: '10',
  hh: '01',
  mi: '00',
  ss: '23',
   ms: '056' 
}

格式: yy:'0'-xxx或者0-xxx mm可以为'01'-'12'或者'1'-'12'或者数字1-12 dd: '01'-31或'1'-'31'或1-31 hh:'00'-'23'或'0'-'23' mi,ss:'00''59'或'0'-'59'或0-59
ms:'000'-'999' 或'0'-'999' 或0-999

输出:'1263142823056'

strtoobjts

objtostrts的反向转换

numtostrts

将numts 转化为 strts

timeplus

处理并得到在某时间点上增加多长时间后的时间,接收两个参数,

参数1: strts

参数2:一定时间的毫秒数String 如: '12312323'

返回:新的strts

timeminus

参数1: strts

参数2:一定时间的毫秒数String 如: '12312323'

返回:新的strts

timespace

得到时间轴上两个时间点之间相距的时间,返回以毫秒计数的字符串

参数1: strts

参数2: strts

返回: 这中间的这段时间的毫秒数 形如 '23433433332'

msconv

将以毫秒计数的一段时间的字符串转化为 多少天多少小时 的形式,注意这里返回的按每月30天每年365天的形式计算返回,所以对于公历闰年,大小月而言是有小误差的

参数1: '234343333'

返回: 形如:{yy:'0000',mm:'00',dd:'12',hh:'03',mi:'30',ss:'01',ms:'000'}

msconvto

按指定的时间单位来将一段毫秒数时间划分,余数不足的部分会被直接忽略

参数1: '123321313123123' 表示一段时间的毫秒数

参数2: 'yy' || 'mm' || 'dd' || 'hh' || 'mi' || 'ss'

返回: 如:{cnt:'50',ret:'xxx',code:'yes'} // cnt 代表多少数量的该单位 ret代表该单位后的余数毫秒数 code:yes/no 是否成功

rolltoms

将多少年,多少月之类的形式反过来转化为一定毫秒数,msconv的逆向方法

输入 : {dd:123,...} // dd,yy,mm,mi,hh,ss均为可选项

格式: yy(可选):'1'-xxx或者1-xxx mm,dd,hh,mi,ss(可选):'01'-xxx或者'1'-xxx或1-xxx

输出: '3453324343242' // 代表毫秒数

tzset

设置转化为自然语言时,格式化输出的时间处于哪一个当前时区,默认时区:E8

7.5W-7.5E 中时区零时区经度每15度一个时区,东12区和西12区重合,中间180度经线为国际日期变更线

东12区为8日,西12区为7日

由西向东越过日期变更线即:东12->西12 -1日,

由东向西越过 即:西12->东12 +1日

参数: 'WE0/ E1'/'E2'.../'E12'/'W1'/.../'W12' // 东西12个时区 和零时区(中时区WE0)

tzmiset

设置与GMT时间的偏移分钟数

参数: 480/-30 //可为正数或负数

tzcityset

设置当前采用全球某个主要城市的时区 实际上,世界上不少国家和地区都不严格按时区来计算时间。为了在全国范围内采用统一的时间,一般都把某一个时区的时间作为全国统一采用的时间。

例如,我国把首都北京所在的东8区的时间作为全国统一的时间,称为北京时间。

又例如,英国、法国、荷兰和比利时等国,虽地处中时区,但为了和欧洲大多数国家时间相一致,则采用东1区的时间。

参数: 'beijing'/... //主要城市的拼音或英文名 参数支持范围如下:

beijing(中国-北京+8) 480,  hongkong(中国-香港+8) 480, Honolulu(美国-夏威夷檀香山-10) -600, alaska(美国-阿拉斯加-8) -480,
sanfrancisco(美国-旧金山-8) -480,     henei(越南-河内+7)   420, huzhiming(越南-胡志明+7) 420, dubai(迪拜+4) 240, 
kabul(阿富汗-卡布+4) 240, cairo(埃及-开罗+2) 120, seoul (韩国-首尔汉城+9) 540, moscow(俄罗斯-莫斯科+3) 180

GMT: 格林尼治标准时间 GMT使用地球公转和自转作为标准 现世界已使用utc代替,utc使用国际原子时钟作为标准 但gmt的时区仍然在utc中延用, 协调世界时区会使用“Z”

中国北京时间 gmt+8 utc+8都是一样的意思,

国际原子时间精度每日数纳秒 世界协调时精度精确到毫秒