# js-datef
**Repository Path**: jinko/js-datef
## Basic Information
- **Project Name**: js-datef
- **Description**: JavaScript 日期时间格式化函数
- **Primary Language**: JavaScript
- **License**: BSD-3-Clause
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2020-09-18
- **Last Updated**: 2022-06-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# js-datef
## 介绍
JavaScript 日期时间格式化函数
## 安装或引入
```html
或者
```
## 定义
```javascript
/**
* @param {String} format 字符串格式
* 指定生成时间格式的字符串,例如 Y-m-d H:i:s 会生成类似 2020-12-12 09:30:00 的时间格式
* 详细格式说明请参考文档
*
* @param {String|Date|Number|null} time 日期
* 指定的时间或日期, 可以是时间戳(秒)、Date对象、字符串时间格式(如2020-12-21)
* 若为空(null、undefined、false、空字符串)则取当前时间
*
* @param {String|undefined} adjustments 调节器
* 用于重新调整时间, 例如当前时间的周一、或者增加2周时间, 减少50分钟等。
* 格式 [{weekname[:begin|end]}](+|-){number}[y|m|d|h|i|s|w] 不区分大小写
* 示例:
* 周一这个时间点再加2个小时 = Monday + 2h
* 加三周少50分钟 = +3w-50i
* 详细格式说明请参考文档
*
* @returns {String}
*/
function datef(format, date, adjustments) {};
```
## 使用示例
```javascript
//返回当前时间类似"2020-09-30 12:30:11"的时间格式
datef('Y-m-d H:i:s');
datef();
//"200930"
datef('ymd');
//"Fri Sep 18 2020 14:59:36"
datef('D M d Y H:i:s');
//"2021-01-09 08:00:00"
datef('Y-m-d H:i:s', 1610150400);
//"2021-01-09 08:00:00"
datef('Y-m-d H:i:s', "1610150400");
//"2020-12-30 08:00:00"
datef('Y-m-d H:i:s', "2020-12-30");
//"Wed Dec 30 2020 10:33:12"
datef('D M d Y H:i:s', "2020-12-30 10:33:12");
//"2020-09-18"
var date = new Date();
datef('Y-m-d', date);
//当前周周一早上8点
datef('Y-m-d 08:00:00', null, "mon");
datef('Y-m-d H:i:s', null, "mon:begin +8h");
datef('Y-m-d H:i:s', datef('Y-m-d'), 'mon +8h');
//当前周一 至 周日 时间
//周一
datef('Y-m-d H:i:s', null, "mon:begin");
//周日
datef('Y-m-d H:i:s', null, "sun:end");
//当月月初至月底
//月初
datef('Y-m-01 H:i:s', null, ":begin");
//月底
datef('Y-m-t H:i:s', null, ":end");
//最近10天
var date=new Date();
//开始
datef('Y-m-d H:i:s', date, "-10d");
//结束
datef('Y-m-d H:i:s', date);
//2013-12-20 10:00:00 的最近七天(最近一周)
var date=new Date();
//开始
datef('Y-m-d H:i:s', '2013-12-20 10:00:00', "-1w");
//结束
"2013-12-20 10:00:00"
//下月底
datef('Y-m-t H:i:s', null, ":end +1m");
//上月底
datef('Y-m-t H:i:s', null, ":end -1m");
//年底
datef('Y-12-31 H:i:s', null, ":end");
//3小时前
//开始
datef(null, null, "-3h");
//结束
datef();
//三小时前的时间戳(秒)
datef('U', null, "-3h");
//当前时间戳
datef('U');
// 字符串原样显示 Tomorrow is 2020-09-29
datef('{Tomorrow is} Y-m-d', '2020-09-28', '+1d');
// '{}'符串原样显示 Tomorrow is {200929} 2020-09-29
datef('{Tomorrow is} \\{ymd} Y-m-d', '2020-09-28', '+1d');
// '\'符串原样显示 Tomorrow is \ ymd 2020-09-29
datef('{Tomorrow is} \\\\ {ymd} Y-m-d', '2020-09-28', '+1d');
```
## 说明
#### 格式化参数(format):
> _使用大括号 '{}' 中的文本将原样显示, 例如 {test} 中的test不会被解析_
| format字符 | 说明| 返回值 |
| --- | --- | --- |
|d|一个月中的第几天,有前导 0 的 2 位数字|从 01 到 31|
|D|3 个字符表示的星期几|从 Mon 到 Sun|
|j|一个月中的第几天,无前导 0|从 1 到 31|
|l (小写 'L')|星期几,英文全称|从 Sunday 到 Saturday|
|N|ISO-8601 规定的数字表示的星期几|从 1 (表示星期一)到 7 (表示星期日)|
|S|一个月中的第几天,带有 2 个字符表示的英语序数词。|st, nd, rd 或者 th。 可以和 j 联合使用。|
|w|数字表示的星期几|从 0 (星期日) 到 6 (星期六)|
|z|一年中的第几天,从 0 开始计数|从 0 到 365|
|周|---|---|
|W|ISO-8601 规范的一年中的第几周,周一视为一周开始。|示例: 42 (本年第42周)|
|月|---|---|
|F|月份英文全拼,例如:January 或 March|从 January 到 December|
|m|带有 0 前导的数字表示的月份|从 01 到 12|
|M|3 个字符表示的月份的英文简拼|从 Jan 到 Dec|
|n|月份的数字表示,无前导 0|1 through 12|
|t|给定月份中包含多少天|从 28 到 31|
|年|---|---|
|L|是否为闰年|如果是闰年,则返回 1,反之返回 0。|
|o|ISO-8601 规范的年份,同 Y 格式。
有一种情况除外:当 ISO 的周数(W)属于前一年或者后一年时,会返回前一年或者后一年的年份数字表达。
属于前一年或者后一年时,会返回前一年或者后一年的年份数字表达。 |示例:1999 或 2003|
|Y|4 位数字的年份|示例:1999 或 2003|
|y|2 位数字的年份|示例: 99 或 03|
|时间|---|---|
|a|上午还是下午,2 位小写字符|am 或 pm|
|A|上午还是下午,2 位大写字符|AM 或 PM|
|g|小时,12时制,无前导 0|从 1 到 12|
|G|小时,24时制,无前导 0|从 0 到 23|
|h|小时,12时制,有前导 0 的 2 位数字|从 01 到 12|
|H|小时,24时制,有前导 0 的 2 位数字|00 through 23|
|i|分钟,有前导 0 的 2 位数字|从 00 到 59|
|s|秒,有前导 0 的 2 位数字|从 00 到 59|
|u|微秒 |示例: 654321|
|v|毫秒 |示例: 654|
|U|自 1970 年 1 月 1 日 0 时 0 分 0 秒(GMT 时间)以来的时间,以秒为单位|
#### 时间调整格式(adjustments):
> _不区分大小写_
- 周调整
格式: `周名:时间起点`
例如: `Monday:begin`
周名:
| key | 说明 |
| --- | --- |
| Mon | 周一 |
| Monday | 周一 |
| Tue | 周二 |
| Tuesday | 周二 |
| Wed | 周三 |
| Wednesday | 周三 |
| Thu | 周四 |
| Thursday | 周四 |
| Fri | 周五 |
| Friday | 周五 |
| Sat | 周六 |
| Saturday | 周六 |
| Sun | 周日 |
| Sunday | 周日 |
时间起点:
| key | 说明 |
| --- | --- |
| begin | 将时间调整到 00:00:00 |
| end | 将时间调整到 23:59:59 |
- 时间调整字符
格式 `[+|-]{number}{时间调整字符}...`
例如 `+1y5d4h-10i-2s` 加1年5天4小时少10分钟2秒
相同写法:
`+1y5d4h-10i2s`
`+1y5d4h -10i2s`
`+1y +5d +4h -10i -2s`
| key | 说明 |
| --- | --- |
| y | 年份 |
| m | 月份 |
| d | 日期 |
| h | 小时 |
| i | 分钟 |
| s | 秒钟 |
| w | 周 |