We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
moment.js作为一个全球通用库,需要做兼容性(<ES5),数据边界检测,边缘(多)场景覆盖,国际化支持...使其最终的文件体积较大(moment.min.js 52Kb, moment-with-locales.min.js 327Kb).在无国际化的日常业务开发中,Date的应用场景主要在日期(时间)控件的格式化展示,处理(比较,区间计算). 下面几个自定义的小函数,能否解决这些日常需求呢?
(moment.min.js 52Kb, moment-with-locales.min.js 327Kb)
在日期选择器(datePicker)中,通常采用类似2018-10-15 | 15:34:33的格式来展示给用户.
2018-10-15
15:34:33
// return 2018-10-15 15:34:33 export function getDateTime(date = new Date()) { let arr = new Array(6); arr[0] = date.getFullYear(); arr[1] = date.getMonth() + 1; arr[2] = date.getDate(); arr[3] = date.getHours(); arr[4] = date.getMinutes(); arr[5] = date.getSeconds(); arr = arr.map(item => item < 10 ? `0${item}` : item); return `${arr.slice(0, 3).join('-')} ${arr.slice(3).join(':')}`; }
getDateTime(date).slice(0, 10)
getDateTime(date).slice(-8)
通过字符转换思想,有个简洁的实现方法. toISOString()返回世界时间格式化的字符串,需要加上对应时区再转换,才能正确获取本地时区时间信息.
export function getDateTime(date = new Date()) { const times = date.getTime() - date.getTimezoneOffset() * 6e4; return new Date(times).toISOString().slice(0,19).replace('T', ' ') }
转换为中文时间格式
const cn = ['年', '月','日 ', '时', '分', '秒']; const ret = getDateTime(date).split(/[-:\s]/).map((val, index) => val + cn[index]).join('');
采用上面的日期字符串转换为Date对象,做后续操作的进一步处理.如日期区间查询(昨天,近三天,近一周,近一个月).
// 这里有隐性转换, '09' 通过减法运算或给Date()构造函数传递多参数,会转整. // 如果是ES5,这里spread运算符怎么写? https://babeljs.io/en/repl.html export function setFormatDate(string) { const args = string.split(/[-:\s]/); args[1] -= 1; return new Date(...args); }
如上面所描述的日期区间查询,对于常用的几个时间区间(今天,昨天,近一周,近一个月...),会提供便捷的按钮操作来处理展现日期区间. 对于天/小时/分钟/秒,我们可以通过生成的日期对象,加减对应的毫秒数来实现.
const ONE_DAY = 86400000; export function getOffsetDayDate(offset = 0, start = new Date()) { const times = start.getTime(); const date = new Date(offset * ONE_DAY + times); return getDateTime(date).slice(0, 10); }
对于月份,我们则可以利用new Date多参数(>=2)传递时,会自动进位的特性来便捷实现. 当对应的年,月(0~11),日(1~31),小时,分钟,秒,毫秒,超出其范围时,Date构造函数会自动进行进位或降位计算. 如给月份传递-1,则Date构造函数将返回上一年的12月份.其中有个自然逻辑需要考虑,当目前的月当前天数 大于计算增加月后最大的天数后,需要做一下处理.
export function getOffsetMonthDate(offset, date = new Date()) { const year = date.getFullYear(); const month = date.getMonth(); const day = date.getDate(); const monthLastDay = new Date(new Date(year, month + offset + 1, 1, 1) - ONE_DAY).getDate(); if (day > monthLastDay) date.setDate(monthLastDay); date.setMonth(month + offset); return getDateTime(date).slice(0, 10); }
将日期按上面的标准字符格式转换后,可以直接采用字符串来比较,解决常用的开始结束时间比较(早于,晚于,等于),无须转换为毫秒数(date.getTime() 或 JavaScript的隐式调valueOf())来进行比较. 特定区间的日期比较(如时间间隔不能超过一年),则可以用上面的函数将日期字符转换为日期对象,加减相应的毫秒数来对比处理(也可以将一个日期字符加上指定时间区间再转换为字符来对比).
date.getTime() 或 JavaScript的隐式调valueOf()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
The text was updated successfully, but these errors were encountered:
No branches or pull requests
moment.js作为一个全球通用库,需要做兼容性(<ES5),数据边界检测,边缘(多)场景覆盖,国际化支持...使其最终的文件体积较大
(moment.min.js 52Kb, moment-with-locales.min.js 327Kb)
.在无国际化的日常业务开发中,Date的应用场景主要在日期(时间)控件的格式化展示,处理(比较,区间计算).下面几个自定义的小函数,能否解决这些日常需求呢?
日期/时间格式化
在日期选择器(datePicker)中,通常采用类似
2018-10-15
|15:34:33
的格式来展示给用户.getDateTime(date).slice(0, 10)
getDateTime(date).slice(-8)
通过字符转换思想,有个简洁的实现方法. toISOString()返回世界时间格式化的字符串,需要加上对应时区再转换,才能正确获取本地时区时间信息.
转换为中文时间格式
从上面标准字符串生成对应日期对象
采用上面的日期字符串转换为Date对象,做后续操作的进一步处理.如日期区间查询(昨天,近三天,近一周,近一个月).
根据指定日期生成一定时间区间的日期
如上面所描述的日期区间查询,对于常用的几个时间区间(今天,昨天,近一周,近一个月...),会提供便捷的按钮操作来处理展现日期区间.
对于天/小时/分钟/秒,我们可以通过生成的日期对象,加减对应的毫秒数来实现.
对于月份,我们则可以利用new Date多参数(>=2)传递时,会自动进位的特性来便捷实现.
当对应的年,月(0~11),日(1~31),小时,分钟,秒,毫秒,超出其范围时,Date构造函数会自动进行进位或降位计算.
如给月份传递-1,则Date构造函数将返回上一年的12月份.其中有个自然逻辑需要考虑,当目前的月当前天数 大于计算增加月后最大的天数后,需要做一下处理.
日期时间比较
将日期按上面的标准字符格式转换后,可以直接采用字符串来比较,解决常用的开始结束时间比较(早于,晚于,等于),无须转换为毫秒数(
date.getTime() 或 JavaScript的隐式调valueOf()
)来进行比较.特定区间的日期比较(如时间间隔不能超过一年),则可以用上面的函数将日期字符转换为日期对象,加减相应的毫秒数来对比处理(也可以将一个日期字符加上指定时间区间再转换为字符来对比).
Notice
推荐阅读
The text was updated successfully, but these errors were encountered: