2020-09-11 17:31:33 +08:00
|
|
|
|
carbon 是一个轻量级、语义化、对IDE友好的日期时间处理库,是PHP Carbon库的Golang实现版本,初衷是为了摆脱Golang反人类的2006-01-02 15:04:05格式化时间设计,支持链式调用和gorm、xrom等主流orm
|
2020-09-07 17:10:33 +08:00
|
|
|
|
|
2020-09-14 10:39:20 +08:00
|
|
|
|
如果您觉得不错,请给个star吧
|
|
|
|
|
|
2020-09-07 17:12:49 +08:00
|
|
|
|
github:[github.com/golang-module/carbon](https://github.com/golang-module/carbon "github.com/golang-module/carbon")
|
2020-09-07 17:16:34 +08:00
|
|
|
|
|
2020-09-07 17:10:33 +08:00
|
|
|
|
gitee:[gitee.com/go-package/carbon](https://gitee.com/go-package/carbon "gitee.com/go-package/carbon")
|
|
|
|
|
|
|
|
|
|
#### 安装
|
2020-09-07 17:47:49 +08:00
|
|
|
|
```go
|
2020-09-08 09:59:10 +08:00
|
|
|
|
go get -u gitee.com/go-package/carbon
|
2020-09-07 17:47:49 +08:00
|
|
|
|
```
|
2020-09-13 12:44:17 +08:00
|
|
|
|
#### 初始化
|
2020-09-07 17:10:33 +08:00
|
|
|
|
```go
|
|
|
|
|
import (
|
|
|
|
|
"gitee.com/go-package/carbon"
|
|
|
|
|
)
|
|
|
|
|
|
2020-09-13 13:33:45 +08:00
|
|
|
|
// 初始化,默认时区为Local,即服务器所在时区
|
2020-09-09 10:05:41 +08:00
|
|
|
|
c := carbon.New()
|
2020-09-13 13:33:45 +08:00
|
|
|
|
// 初始化并设置时区
|
2020-09-13 12:44:17 +08:00
|
|
|
|
c := carbon.New().Timezone(carbon.PRC)
|
2020-09-07 17:10:33 +08:00
|
|
|
|
```
|
2020-09-13 15:08:23 +08:00
|
|
|
|
>更多时区常量请查看[const.go](https://gitee.com/go-package/carbon/blob/master/const.go "const.go")文件
|
2020-09-07 17:10:33 +08:00
|
|
|
|
|
2020-09-13 12:44:17 +08:00
|
|
|
|
#### 通用用法
|
2020-09-13 13:33:45 +08:00
|
|
|
|
|
2020-09-13 19:14:47 +08:00
|
|
|
|
> 假设当前北京时间为2020-09-08 13:00:01
|
2020-09-13 13:33:45 +08:00
|
|
|
|
|
2020-09-13 13:02:15 +08:00
|
|
|
|
###### 获取当前时间
|
2020-09-07 17:10:33 +08:00
|
|
|
|
```go
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().Format("Y-m-d H:i:s") // 2020-09-08 13:00:01
|
|
|
|
|
c.Now().Format("y-m-d h:i:s") // 20-09-08 01:00:01
|
2020-09-09 10:05:41 +08:00
|
|
|
|
c.Now().Format("Y/m/d") // 2020/09/08
|
2020-09-13 19:04:34 +08:00
|
|
|
|
c.Now().ToDateString() // 2020-09-08
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().ToDateTimeString() // 2020-09-08 13:00:01
|
2020-09-13 13:21:47 +08:00
|
|
|
|
c.Now().ToDateStartString() // 2020-09-08 00:00:00
|
|
|
|
|
c.Now().ToDateEndString() // 2020-09-08 23:59:59
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().ToTimeString() // 13:00:01
|
2020-09-13 19:04:34 +08:00
|
|
|
|
c.Now().ToTimeStartString() // 13:00:00
|
|
|
|
|
c.Now().ToTimeEndString() // 13:59:59
|
2020-09-10 09:24:02 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
###### 获取当前时间戳
|
|
|
|
|
```go
|
2020-09-09 10:05:41 +08:00
|
|
|
|
c.Now().ToTimestamp() // 1599272433
|
2020-09-07 17:10:33 +08:00
|
|
|
|
```
|
2020-09-10 09:24:02 +08:00
|
|
|
|
|
2020-09-13 13:02:15 +08:00
|
|
|
|
###### 获取昨天、今天、明天
|
2020-09-07 17:10:33 +08:00
|
|
|
|
```go
|
2020-09-13 13:02:15 +08:00
|
|
|
|
c.Yesterday() // 2020-09-07
|
|
|
|
|
c.Today() // 2020-09-08
|
|
|
|
|
c.Tomorrow() // 2020-09-09
|
|
|
|
|
|
|
|
|
|
c.StartOfYesterday() // 2020-09-07 00:00:00
|
|
|
|
|
c.EndOfYesterday() // 2020-09-07 23:59:59
|
|
|
|
|
c.StartOfToday() // 2020-09-08 00:00:00
|
|
|
|
|
c.EndOfToday() // 2020-09-08 23:59:59
|
|
|
|
|
c.StartOfTomorrow() // 2020-09-09 00:00:00
|
|
|
|
|
c.EndOfTomorrow() // 2020-09-09 23:59:59
|
2020-09-07 17:10:33 +08:00
|
|
|
|
```
|
|
|
|
|
|
2020-10-01 14:49:32 +08:00
|
|
|
|
###### 获取开始时间、结束时间
|
2020-09-13 07:24:56 +08:00
|
|
|
|
|
2020-09-08 16:01:01 +08:00
|
|
|
|
```go
|
2020-10-01 14:49:32 +08:00
|
|
|
|
// 当前年的开始
|
2020-10-01 14:35:56 +08:00
|
|
|
|
c.Now().StartOfYear() // 2020-01-01 00:00:00
|
2020-10-01 14:49:32 +08:00
|
|
|
|
// 当前年的结束
|
2020-10-01 14:35:56 +08:00
|
|
|
|
c.Now().EndOfYear() // 2020-12-31 23:59:59
|
2020-10-01 14:49:32 +08:00
|
|
|
|
// 当前月的开始
|
2020-10-01 14:35:56 +08:00
|
|
|
|
c.Now().StartOfMonth() // 2020-09-01 00:00:00
|
2020-10-01 14:49:32 +08:00
|
|
|
|
// 当前月的结束
|
2020-10-01 14:35:56 +08:00
|
|
|
|
c.Now().EndOfMonth() // 2020-09-30 23:59:59
|
2020-10-01 14:49:32 +08:00
|
|
|
|
// 当前天的开始
|
2020-10-01 14:35:56 +08:00
|
|
|
|
c.Now().StartOfDay() // 2020-09-08 00:00:00
|
2020-10-01 14:49:32 +08:00
|
|
|
|
// 当前天的结束
|
|
|
|
|
c.Now().EndOfDay() // 2020-09-08 23:59:59
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
###### 获取第一天、最后一天
|
|
|
|
|
|
|
|
|
|
```go
|
2020-10-01 14:54:04 +08:00
|
|
|
|
// 当前年的第一天
|
2020-10-01 14:49:32 +08:00
|
|
|
|
c.Now().FirstOfYear() // 2020-01-01 00:00:00
|
|
|
|
|
// 当前年的最后一天
|
|
|
|
|
c.Now().LastOfYear() // 2020-12-31 00:00:00
|
|
|
|
|
// 当前月的第一天
|
|
|
|
|
c.Now().FirstOfMonth() // 2020-09-01 00:00:00
|
|
|
|
|
// 当前月的最后一天
|
|
|
|
|
c.Now().LastOfMonth() // 2020-09-30 00:00:00
|
2020-09-08 16:01:01 +08:00
|
|
|
|
```
|
|
|
|
|
|
2020-09-08 10:07:13 +08:00
|
|
|
|
###### 数字转标准时间字符串
|
2020-09-07 17:10:33 +08:00
|
|
|
|
```go
|
|
|
|
|
// 时间戳 转成 标准时间字符串
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.CreateFromTimestamp(1599272433).Format("Y-m-d H:i:s") // 2020-09-08 13:00:01
|
2020-09-07 17:10:33 +08:00
|
|
|
|
// 年月日时分秒 转成 标准时间字符串
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.CreateFromDateTime(2020, 09, 08, 13, 00, 01).Format("Y-m-d H:i:s") // 2020-09-08 13:00:01
|
2020-09-07 17:10:33 +08:00
|
|
|
|
// 年月日 转成 标准时间字符串
|
2020-09-09 10:05:41 +08:00
|
|
|
|
c.CreateFromDate(2020, 09, 08).Format("Y-m-d H:i:s") // 2020-09-08 00:00:00
|
2020-09-07 17:10:33 +08:00
|
|
|
|
// 时分秒 转成 标准时间字符串(年月日默认为当前年月日)
|
2020-09-09 10:05:41 +08:00
|
|
|
|
c.CreateFromTime(13, 14, 15).Format("Y-m-d H:i:s") // 2020-09-08 13:14:15
|
2020-09-07 17:10:33 +08:00
|
|
|
|
```
|
|
|
|
|
|
2020-09-10 09:24:02 +08:00
|
|
|
|
###### 解析标准格式时间字符串
|
2020-09-07 17:10:33 +08:00
|
|
|
|
```go
|
2020-09-09 10:05:41 +08:00
|
|
|
|
c.Parse("2020-09-08 13:00:00").Format("YmdHis") // 20200908130000
|
|
|
|
|
c.Parse("2020-09-08 13:00:00").Format("Y-m-d") // 2020-09-08
|
|
|
|
|
c.Parse("2020-09-08").Format("Y/m/d H:i:s") // 2020/09/08 00:00:00
|
|
|
|
|
c.Parse("2020-09-08").Format("Y/m/d") // 2020/09/08
|
|
|
|
|
c.Parse("2020-09-08 13:00:00").ToDateTimeString() // 2020-09-05 13:00:00
|
|
|
|
|
c.Parse("2020-09-08 13:00:00").ToDateString() // 2020-09-08
|
|
|
|
|
c.Parse("2020-09-08 13:00:00").ToTimeString() // 13:00:00
|
|
|
|
|
c.Parse("2020-09-08 13:00:00").ToTimestamp() // 1599272433
|
|
|
|
|
|
|
|
|
|
c.Parse("2020/09/08 13:00:00").Format("Y-m-d H:i:s") // 2020-09-08 13:00:00
|
|
|
|
|
c.Parse("2020/09/08 13:00:00").Format("Y-m-d") // 2020-09-08
|
|
|
|
|
c.Parse("2020/09/08").Format("Y-m-d H:i:s") // 2020-09-08 00:00:00
|
|
|
|
|
c.Parse("2020/09/08").Format("Y-m-d") // 2020-09-08
|
|
|
|
|
c.Parse("2020/09/08 13:00:00").ToDateTimeString() // 2020-09-05 13:00:00
|
|
|
|
|
c.Parse("2020/09/08 13:00:00").ToDateString() // 2020-09-08
|
|
|
|
|
c.Parse("2020/09/08 13:00:00").ToTimeString() // 10:20:30
|
|
|
|
|
c.Parse("2020/09/08 13:00:00").ToTimestamp() // 1599272433
|
|
|
|
|
|
|
|
|
|
c.Parse("20200908130000").Format("Y-m-d H:i:s") // 2020-09-08 13:00:00
|
|
|
|
|
c.Parse("20200908130000").Format("Y-m-d") // 2020-09-08
|
|
|
|
|
c.Parse("20200908").Format("Y-m-d H:i:s") // 2020-09-08 00:00:00
|
|
|
|
|
c.Parse("20200908").Format("Y/m/d") // 2020/09/08
|
|
|
|
|
c.Parse("20200908130000").ToDateTimeString() // 2020-09-05 13:00:00
|
|
|
|
|
c.Parse("20200908130000").ToDateString() // 2020-09-08
|
|
|
|
|
c.Parse("20200908130000").ToTimeString() // 13:00:00
|
|
|
|
|
c.Parse("20200908130000").ToTimestamp() // 1599272433
|
2020-09-07 17:10:33 +08:00
|
|
|
|
```
|
|
|
|
|
|
2020-10-01 14:54:04 +08:00
|
|
|
|
###### 解析自定义格式时间字符串
|
|
|
|
|
```go
|
|
|
|
|
c.ParseByFormat("2020|09|08 13:00:00", "Y|m|d H:i:s").Format("Y-m-d H:i:s") // 2020-09-08 13:00:00
|
|
|
|
|
c.ParseByFormat("2020%09%08% 01%00%00", "Y年m月d日 h%i%s").Format("Y-m-d H:i:s") // 2020-09-08 13:00:00
|
|
|
|
|
c.ParseByFormat("2020年09月08日 13:00:00", "Y年m月d日 H:i:s").Format("Y-m-d H:i:s") // 2020-09-08 13:00:00
|
|
|
|
|
c.ParseByFormat("2020年09月08日 13时00分00秒", "Y年m月d日 H时i分s秒").ToDateTimeString() // 2020-09-08 13:20:30
|
|
|
|
|
c.ParseByFormat("2020年09月08日 13时00分00秒", "Y年m月d日 H时i分s秒").ToDateString() // 2020-09-08
|
|
|
|
|
c.ParseByFormat("2020年09月08日 13时00分00秒", "Y年m月d日 H时i分s秒").ToTimeString() // 13:00:00
|
|
|
|
|
c.ParseByFormat("2020年09月08日 13时00分00秒", "Y年m月d日 H时i分s秒").ToTimestamp() // 1599272433
|
|
|
|
|
```
|
|
|
|
|
|
2020-10-01 14:35:56 +08:00
|
|
|
|
###### 解析相对时间字符串(相对于今天)
|
|
|
|
|
```go
|
|
|
|
|
// 十小时后
|
|
|
|
|
c.ParseByDuration("10h").ToDateTimeString() // 2020-09-09 01:00:01
|
|
|
|
|
// 十小时前
|
|
|
|
|
c.ParseByDuration("-10h").Format("Y-m-d H:i:s") // 2020-09-08 03:00:01
|
|
|
|
|
// 十分钟后
|
|
|
|
|
c.ParseByDuration("10m").Format("Y-m-d H:i:s") // 2020-09-08 13:10:01
|
|
|
|
|
// 十分钟前
|
|
|
|
|
c.ParseByDuration("-10m").Format("Y-m-d H:i:s") // 2020-09-08 12:50:01
|
|
|
|
|
// 十秒后
|
|
|
|
|
c.ParseByDuration("10s").Format("Y-m-d H:i:s") // 2020-09-08 13:00:11
|
|
|
|
|
// 十秒前
|
|
|
|
|
c.ParseByDuration("-10s").Format("Y-m-d H:i:s") // 2020-09-08 12:59:51
|
|
|
|
|
```
|
|
|
|
|
|
2020-09-08 09:57:51 +08:00
|
|
|
|
###### 时间旅行
|
2020-09-10 09:24:02 +08:00
|
|
|
|
|
2020-09-07 17:10:33 +08:00
|
|
|
|
```go
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 三年后
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().AddYears(3).ToDateTimeString() // 2023-09-08 13:00:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 一年后
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().AddYear().ToDateTimeString() // 2021-09-08 13:00:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 三年前
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().SubYears(3).ToDateTimeString() // 2017-09-08 13:00:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 一年前
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().SubYear().ToDateTimeString() // 2019-09-08 13:00:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
|
|
|
|
|
// 三月后
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().AddMonths(3).ToDateTimeString() // 2020-12-08 13:00:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 一月后
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().AddMonth().ToDateTimeString() // 2020-10-08 13:00:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 三月前
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().SubMonths(3).ToDateTimeString() // 2020-06-08 13:00:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 一月前
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().SubMonth().ToDateTimeString() // 2020-08-08 13:00:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
|
2020-09-12 08:53:59 +08:00
|
|
|
|
// 三周后
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().AddWeeks(3).ToDateTimeString() // 2020-09-29 13:00:01
|
2020-09-12 08:53:59 +08:00
|
|
|
|
// 一周后
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().AddWeek().ToDateTimeString() // 2020-09-15 13:00:01
|
2020-09-12 08:53:59 +08:00
|
|
|
|
// 三周前
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().SubWeeks(3).ToDateTimeString() // 2020-08-17 13:00:01
|
2020-09-12 08:53:59 +08:00
|
|
|
|
// 一周前
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().SubWeek().ToDateTimeString() // 2020-09-01 13:00:01
|
2020-09-12 08:53:59 +08:00
|
|
|
|
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 三天后
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().AddDays(3).ToDateTimeString() // 2020-09-11 13:00:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 一天后
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().AddDay().ToDateTimeString() // 2020-09-09 13:00:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 三天前
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().SubDays(3).ToDateTimeString() // 2020-09-05 13:00:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 一天前
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().SubDay().ToDateTimeString() // 2020-08-07 13:00:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
|
|
|
|
|
// 三小时后
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().AddHours(3).ToDateTimeString() // 2020-09-08 16:00:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 一小时后
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().AddHoury().ToDateTimeString() // 2020-09-08 14:00:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 三小时前
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().SubHours(3).ToDateTimeString() // 2020-09-08 10:00:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 一小时前
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().SubHour().ToDateTimeString() // 2020-09-08 12:00:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
|
|
|
|
|
// 三分钟后
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().AddMinutes(3).ToDateTimeString() // 2020-09-08 13:03:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 一分钟后
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().AddMinute().ToDateTimeString() // 2020-09-08 13:01:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 三分钟前
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().SubMinutes(3).ToDateTimeString() // 2020-09-08 12:57:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 一分钟前
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().SubMinute().ToDateTimeString() // 2020-09-08 12:59:01
|
2020-09-08 12:18:07 +08:00
|
|
|
|
|
|
|
|
|
// 三秒钟后
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().AddSeconds(3).ToDateTimeString() // 2020-09-08 13:00:04
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 一秒钟后
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().AddSecond().ToDateTimeString() // 2020-09-08 13:00:02
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 三秒钟前
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().SubSeconds(3).ToDateTimeString() // 2020-09-08 12:59:56
|
2020-09-08 12:18:07 +08:00
|
|
|
|
// 一秒钟前
|
2020-09-13 19:14:47 +08:00
|
|
|
|
c.Now().SubSecond().ToDateTimeString() // 2020-09-08 13:00:00
|
2020-10-01 14:35:56 +08:00
|
|
|
|
|
2020-09-07 17:10:33 +08:00
|
|
|
|
```
|
|
|
|
|
|
2020-09-09 20:23:03 +08:00
|
|
|
|
###### 时间判断
|
2020-09-07 17:10:33 +08:00
|
|
|
|
```go
|
|
|
|
|
// 是否是闰年
|
2020-09-09 10:05:41 +08:00
|
|
|
|
c.Now().IsLeapYear() // true
|
|
|
|
|
|
2020-09-09 20:23:03 +08:00
|
|
|
|
// 是否是一月
|
|
|
|
|
c.Now().IsJanuary() // false
|
|
|
|
|
// 是否是二月
|
2020-09-10 15:00:53 +08:00
|
|
|
|
c.Now().IsFebruary() // false
|
2020-09-09 20:23:03 +08:00
|
|
|
|
// 是否是三月
|
|
|
|
|
c.Now().IsMarch() // false
|
|
|
|
|
// 是否是四月
|
|
|
|
|
c.Now().IsApril() // false
|
|
|
|
|
// 是否是五月
|
|
|
|
|
c.Now().IsMay() // false
|
|
|
|
|
// 是否是六月
|
|
|
|
|
c.Now().IsJune() // false
|
|
|
|
|
// 是否是七月
|
|
|
|
|
c.Now().IsJuly() // false
|
|
|
|
|
// 是否是八月
|
|
|
|
|
c.Now().IsAugust() // false
|
|
|
|
|
// 是否是九月
|
|
|
|
|
c.Now().IsSeptember() // true
|
|
|
|
|
// 是否是十月
|
|
|
|
|
c.Now().IsOctober() // false
|
|
|
|
|
// 是否是十一月
|
|
|
|
|
c.Now().IsNovember() // false
|
|
|
|
|
// 是否是十二月
|
|
|
|
|
c.Now().IsDecember() // false
|
|
|
|
|
|
2020-09-07 17:10:33 +08:00
|
|
|
|
// 是否是周一
|
2020-09-09 10:05:41 +08:00
|
|
|
|
c.Now().IsMonday() // false
|
2020-09-07 17:10:33 +08:00
|
|
|
|
// 是否是周二
|
2020-09-09 10:05:41 +08:00
|
|
|
|
c.Now().IsTuesday() // true
|
2020-09-07 17:10:33 +08:00
|
|
|
|
// 是否是周三
|
2020-09-09 10:05:41 +08:00
|
|
|
|
c.Now().IsWednesday() // false
|
2020-09-07 17:10:33 +08:00
|
|
|
|
// 是否是周四
|
2020-09-09 10:05:41 +08:00
|
|
|
|
c.Now().IsThursday() // false
|
2020-09-07 17:10:33 +08:00
|
|
|
|
// 是否是周五
|
2020-09-09 10:05:41 +08:00
|
|
|
|
c.Now().IsFriday() // false
|
2020-09-07 17:10:33 +08:00
|
|
|
|
// 是否是周六
|
2020-09-09 10:05:41 +08:00
|
|
|
|
c.Now().IsSaturday() // false
|
2020-09-07 17:10:33 +08:00
|
|
|
|
// 是否是周日
|
2020-09-09 10:05:41 +08:00
|
|
|
|
c.Now().IsSunday() // false
|
2020-09-09 10:03:44 +08:00
|
|
|
|
|
2020-09-13 15:08:23 +08:00
|
|
|
|
// 是否是今天
|
|
|
|
|
c.Now().IsToday() // true
|
|
|
|
|
// 是否是昨天
|
|
|
|
|
c.Now().IsYesterday() // false
|
|
|
|
|
// 是否是明天
|
|
|
|
|
c.Now().IsTomorrow() // false
|
2020-09-13 15:26:21 +08:00
|
|
|
|
// 是否是今天开始时间
|
2020-09-13 15:08:23 +08:00
|
|
|
|
c.Now().IsStartOfToday() // false
|
2020-09-13 15:26:21 +08:00
|
|
|
|
// 是否是今天结束时间
|
2020-09-13 15:08:23 +08:00
|
|
|
|
c.Now().IsEndOfToday // false
|
2020-09-13 15:26:21 +08:00
|
|
|
|
// 是否是明天开始时间
|
2020-09-13 15:08:23 +08:00
|
|
|
|
c.Now().IsStartOfTomorrow() // false
|
2020-09-13 15:26:21 +08:00
|
|
|
|
// 是否是明天结束时间
|
2020-09-13 15:08:23 +08:00
|
|
|
|
c.Now().IsEndOfTomorrow() // false
|
2020-09-13 15:26:21 +08:00
|
|
|
|
// 是否是昨天开始时间
|
2020-09-13 15:08:23 +08:00
|
|
|
|
c.Now().IsStartOfYesterday() // false
|
2020-09-13 15:26:21 +08:00
|
|
|
|
// 是否是昨天结束时间
|
2020-09-13 15:08:23 +08:00
|
|
|
|
c.Now().IsEndOfYesterday() // false
|
|
|
|
|
|
2020-09-13 15:26:21 +08:00
|
|
|
|
// 是否是年初
|
2020-09-13 07:31:26 +08:00
|
|
|
|
c.Now().IsFirstOfYear() // false
|
2020-09-10 09:24:02 +08:00
|
|
|
|
//是否是年末
|
2020-09-13 07:31:26 +08:00
|
|
|
|
c.Now().IsLastOfYear() // false
|
2020-09-13 15:26:21 +08:00
|
|
|
|
// 是否是月初
|
2020-09-13 07:31:26 +08:00
|
|
|
|
c.Now().IsFirstOfMonth() // false
|
2020-09-09 10:03:44 +08:00
|
|
|
|
//是否是月末
|
2020-09-13 07:31:26 +08:00
|
|
|
|
c.Now().IsLastOfMonth() // false
|
2020-09-09 20:34:12 +08:00
|
|
|
|
```
|
2020-10-01 14:35:56 +08:00
|
|
|
|
|
|
|
|
|
###### 农历支持
|
|
|
|
|
```go
|
|
|
|
|
// 获取生肖年
|
|
|
|
|
c.Now().ToAnimalYear() // 鼠
|
|
|
|
|
// 获取农历年
|
|
|
|
|
c.Now().ToLunarYear() // 庚子
|
|
|
|
|
|
|
|
|
|
// 是否是鼠年
|
|
|
|
|
c.Now().IsYearOfRat() // true
|
|
|
|
|
// 是否是牛年
|
|
|
|
|
c.Now().IsYearOfOx() // false
|
|
|
|
|
// 是否是虎年
|
|
|
|
|
c.Now().IsYearOfTiger() // false
|
|
|
|
|
// 是否是兔年
|
|
|
|
|
c.Now().IsYearOfRabbit() // false
|
|
|
|
|
// 是否是龙年
|
|
|
|
|
c.Now().IsYearOfDragon() // false
|
|
|
|
|
// 是否是蛇年
|
|
|
|
|
c.Now().IsYearOfSnake() // false
|
|
|
|
|
// 是否是马年
|
|
|
|
|
c.Now().IsYearOfHorse() // false
|
|
|
|
|
// 是否是羊年
|
|
|
|
|
c.Now().IsYearOfGoat() // false
|
|
|
|
|
// 是否是猴年
|
|
|
|
|
c.Now().IsYearOfMonkey() // false
|
|
|
|
|
// 是否是鸡年
|
|
|
|
|
c.Now().IsYearOfRooster() // false
|
|
|
|
|
// 是否是狗年
|
|
|
|
|
c.Now().IsYearOfDog() // false
|
|
|
|
|
// 是否是猪年
|
|
|
|
|
c.Now().IsYearOfPig() // false
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
2020-09-10 09:31:54 +08:00
|
|
|
|
#### 特殊用法
|
2020-09-11 17:50:50 +08:00
|
|
|
|
假设数据表为users,字段有id(int)、name(varchar)、age(int)、birthday(date)、created_at(datetime)、updated_at(datetime)、deleted_at(datetime)
|
|
|
|
|
|
2020-09-10 15:00:53 +08:00
|
|
|
|
##### 在gorm中的应用
|
|
|
|
|
gorm.Open时必须包括parseTime=True参数
|
2020-09-09 20:34:12 +08:00
|
|
|
|
|
|
|
|
|
```go
|
2020-09-11 17:50:50 +08:00
|
|
|
|
// 用法一,使用carbon.GormModel自动维护id、created_at、updated_at、deleted_at
|
2020-09-09 20:34:12 +08:00
|
|
|
|
type User struct {
|
2020-09-11 17:31:33 +08:00
|
|
|
|
carbon.GormModel
|
2020-09-09 20:34:12 +08:00
|
|
|
|
Name string `json:"name"`
|
2020-09-10 09:24:02 +08:00
|
|
|
|
Age int `json:"age"`
|
|
|
|
|
Birthday carbon.ToDateTimeString `json:"birthday"`
|
2020-09-09 20:34:12 +08:00
|
|
|
|
}
|
2020-09-10 09:24:02 +08:00
|
|
|
|
user := User {
|
|
|
|
|
Name: "勾国印"
|
|
|
|
|
Age: 18
|
|
|
|
|
Birthday: "2012-09-09 00:00:00"
|
|
|
|
|
}
|
|
|
|
|
// json.Marshal(user)输出
|
2020-09-09 21:18:16 +08:00
|
|
|
|
{
|
|
|
|
|
"id": 1,
|
|
|
|
|
"name": "勾国印",
|
2020-09-10 09:24:02 +08:00
|
|
|
|
"age": 18,
|
2020-09-09 21:18:16 +08:00
|
|
|
|
"birthday": "2012-09-09 00:00:00",
|
2020-09-10 09:24:02 +08:00
|
|
|
|
"created_at": "2020-09-09 12:13:14",
|
|
|
|
|
"updated_at": "2020-09-09 12:13:14",
|
2020-09-09 21:18:16 +08:00
|
|
|
|
"deleted_at": null
|
|
|
|
|
}
|
2020-09-10 09:24:02 +08:00
|
|
|
|
|
2020-09-11 17:50:50 +08:00
|
|
|
|
// 用法二,不使用carbon.GormModel
|
|
|
|
|
type User struct {
|
|
|
|
|
Name string `json:"name"`
|
|
|
|
|
Age int `json:"age"`
|
|
|
|
|
Birthday carbon.ToDateString `json:"birthday"`
|
|
|
|
|
CreatedAt carbon.ToDateTimeString `json:"created_at"`
|
|
|
|
|
UpdatedAt carbon.ToTimeString `json:"updated_at"`
|
|
|
|
|
DeletedAt carbon.ToTimestamp `json:"deleted_at"`
|
|
|
|
|
}
|
|
|
|
|
user := User {
|
|
|
|
|
Name: "勾国印"
|
|
|
|
|
Age: 18
|
|
|
|
|
Birthday: "2012-09-09 00:00:00"
|
|
|
|
|
}
|
|
|
|
|
// json.Marshal(user)输出
|
|
|
|
|
{
|
|
|
|
|
"id": 1,
|
|
|
|
|
"name": "勾国印",
|
|
|
|
|
"age": 18,
|
|
|
|
|
"birthday": "2012-09-09",
|
|
|
|
|
"created_at": "2020-09-09 12:13:14",
|
|
|
|
|
"updated_at": "12:13:14",
|
|
|
|
|
"deleted_at": 1599272433
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
##### 在xorm中的应用
|
|
|
|
|
xorm.NewEngine时必须包括parseTime=True参数
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
// 用法一,使用carbon.XormModel自动维护id、created_at、updated_at、deleted_at
|
|
|
|
|
type User struct {
|
|
|
|
|
carbon.XormModel
|
|
|
|
|
Name string `json:"name"`
|
|
|
|
|
Age int `json:"age"`
|
|
|
|
|
Birthday carbon.ToDateTimeString `json:"birthday"`
|
|
|
|
|
}
|
|
|
|
|
user := User {
|
|
|
|
|
Name: "勾国印"
|
|
|
|
|
Age: 18
|
|
|
|
|
Birthday: "2012-09-09 00:00:00"
|
|
|
|
|
}
|
|
|
|
|
// json.Marshal(user)输出
|
|
|
|
|
{
|
|
|
|
|
"id": 1,
|
|
|
|
|
"name": "勾国印",
|
|
|
|
|
"age": 18,
|
|
|
|
|
"birthday": "2012-09-09 00:00:00",
|
|
|
|
|
"created_at": "2020-09-09 12:13:14",
|
|
|
|
|
"updated_at": "2020-09-09 12:13:14",
|
|
|
|
|
"deleted_at": null
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 用法二,不使用carbon.XormModel
|
2020-09-10 09:24:02 +08:00
|
|
|
|
type User struct {
|
|
|
|
|
Name string `json:"name"`
|
|
|
|
|
Age int `json:"age"`
|
|
|
|
|
Birthday carbon.ToDateString `json:"birthday"`
|
|
|
|
|
CreatedAt carbon.ToDateTimeString `json:"created_at"`
|
|
|
|
|
UpdatedAt carbon.ToTimeString `json:"updated_at"`
|
|
|
|
|
DeletedAt carbon.ToTimestamp `json:"deleted_at"`
|
|
|
|
|
}
|
|
|
|
|
user := User {
|
|
|
|
|
Name: "勾国印"
|
|
|
|
|
Age: 18
|
|
|
|
|
Birthday: "2012-09-09 00:00:00"
|
|
|
|
|
}
|
|
|
|
|
// json.Marshal(user)输出
|
|
|
|
|
{
|
|
|
|
|
"id": 1,
|
|
|
|
|
"name": "勾国印",
|
|
|
|
|
"age": 18,
|
|
|
|
|
"birthday": "2012-09-09",
|
|
|
|
|
"created_at": "2020-09-09 12:13:14",
|
|
|
|
|
"updated_at": "12:13:14",
|
|
|
|
|
"deleted_at": 1599272433
|
|
|
|
|
}
|
2020-09-07 17:10:33 +08:00
|
|
|
|
```
|
|
|
|
|
|
2020-09-10 09:31:54 +08:00
|
|
|
|
#### 更新日志
|
2020-09-30 23:13:46 +08:00
|
|
|
|
##### 2020-10-01
|
|
|
|
|
* 完善单元测试
|
2020-10-01 18:23:51 +08:00
|
|
|
|
* 修复 AddHours() 传入参数小于1天时变成浮点数的BUG
|
|
|
|
|
* 修复 AddHour() 浮点数BUG
|
|
|
|
|
* 修复 SubHours() 传入参数小于1天时变成浮点数的BUG
|
|
|
|
|
* 修复 SubHour() 浮点数BUG
|
|
|
|
|
* 修复 AddMinutes() 传入参数小于1天时变成浮点数的BUG
|
|
|
|
|
* 修复 AddMinute() 浮点数BUG
|
|
|
|
|
* 修复 SubMinutes() 传入参数小于1天时变成浮点数的BUG
|
|
|
|
|
* 修复 SubMinute() 浮点数BUG
|
|
|
|
|
* 修复 AddSeconds() 传入参数小于1天时变成浮点数的BUG
|
|
|
|
|
* 修复 AddSecond() 浮点数BUG
|
|
|
|
|
* 修复 SubSeconds() 传入参数小于1天时变成浮点数的BUG
|
|
|
|
|
* 修复 SubSecond() 浮点数BUG
|
2020-10-01 00:17:42 +08:00
|
|
|
|
* 修复orm中时间字段类型设置为carbon.ToDateTimeString时报错的BUG
|
2020-10-01 14:35:56 +08:00
|
|
|
|
* 改名解析自定义时间格式方法ParseByCustom() 为 ParseByFormat()
|
|
|
|
|
* 新增 ParseByDuration() 方法将持续时间字符串转化成时间实例
|
2020-10-01 17:39:15 +08:00
|
|
|
|
* 新增 ToAnimalYear() 方法获取生肖年
|
|
|
|
|
* 新增 ToLunarYear() 方法获取农历年
|
|
|
|
|
* 新增 IsYearOfRat() 方法判断是否是鼠年
|
|
|
|
|
* 新增 IsYearOfOx() 方法判断是否是牛年
|
|
|
|
|
* 新增 IsYearOfTiger() 方法判断是否是虎年
|
|
|
|
|
* 新增 IsYearOfRabbit() 方法判断是否是兔年
|
|
|
|
|
* 新增 IsYearOfDragon() 方法判断是否是龙年
|
|
|
|
|
* 新增 IsYearOfSnake() 方法判断是否是蛇年
|
|
|
|
|
* 新增 IsYearOfHorse() 方法判断是否是马年
|
|
|
|
|
* 新增 IsYearOfGoat() 方法判断是否是羊年
|
|
|
|
|
* 新增 IsYearOfMonkey() 方法判断是否是猴年
|
|
|
|
|
* 新增 IsYearOfRooster() 方法判断是否是鸡年
|
|
|
|
|
* 新增 IsYearOfDog() 方法判断是否是狗年
|
|
|
|
|
* 新增 IsYearOfPig() 方法判断是否是猪年
|
2020-09-30 23:13:46 +08:00
|
|
|
|
|
2020-09-13 12:44:17 +08:00
|
|
|
|
##### 2020-09-14
|
|
|
|
|
* 完善单元测试
|
2020-09-14 10:27:06 +08:00
|
|
|
|
* 时区常量移到const.go文件里
|
2020-09-13 12:44:17 +08:00
|
|
|
|
* 新增StartOfYear()方法获取当年开始时间
|
|
|
|
|
* 新增EndOfYear()方法获取当年结束时间
|
|
|
|
|
* 新增StartOfMonth()方法获取当月开始时间
|
|
|
|
|
* 新增EndOfMonth()方法获取当月结束时间
|
|
|
|
|
* 新增StartOfDay()方法获取当天开始时间
|
|
|
|
|
* 新增EndOfDay()方法获取当天结束时间
|
|
|
|
|
* 新增StartOfYesterday()方法获取昨天开始时间
|
|
|
|
|
* 新增EndOfYesterday()方法获取昨天结束时间
|
|
|
|
|
* 新增StartOfToday()方法获取今天开始时间
|
|
|
|
|
* 新增EndOfToday()方法获取今天结束时间
|
|
|
|
|
* 新增StartOfTomorrow()方法获取明天开始时间
|
|
|
|
|
* 新增EndOfTomorrow方法获取明天结束时间
|
2020-09-13 13:21:47 +08:00
|
|
|
|
* 新增ToDateStartString方法转换成日期开始时间
|
|
|
|
|
* 新增ToDateEndString方法转换成日期结束时间
|
2020-09-13 19:04:34 +08:00
|
|
|
|
* 新增ToTimeStartString方法转换成小时开始时间
|
|
|
|
|
* 新增ToTimeEndString方法转换成小时结束时间
|
2020-09-14 09:32:27 +08:00
|
|
|
|
|
|
|
|
|
##### 2020-09-13
|
|
|
|
|
* 私有方法提取到独立文件private.go里
|
2020-09-13 15:08:23 +08:00
|
|
|
|
* 新增IsToday方法判断是否是今天
|
|
|
|
|
* 新增IsYesterday方法判断是否是昨天
|
|
|
|
|
* 新增IsTomorrow方法判断是否是明天
|
|
|
|
|
* 新增IsStartOfToday方法判断是否是今天开始时间
|
|
|
|
|
* 新增IsEndOfToday方法判断是否是今天结束时间
|
|
|
|
|
* 新增IsStartOfTomorrow方法判断是否是明天开始时间
|
|
|
|
|
* 新增IsEndOfTomorrow方法判断是否是明天结束时间
|
|
|
|
|
* 新增IsStartOfYesterday方法判断是否是昨天开始时间
|
|
|
|
|
* 新增IsEndOfYesterday方法判断是否是昨天结束时间
|
2020-09-13 12:44:17 +08:00
|
|
|
|
|
2020-09-11 17:50:50 +08:00
|
|
|
|
##### 2020-09-12
|
2020-09-12 09:17:14 +08:00
|
|
|
|
* 修复数据库中时间类型字段值为null或0000-00-00 00:00:00时,json格式化后为0001-01-01 00:00:00的BUG
|
2020-09-11 17:50:50 +08:00
|
|
|
|
* 完善单元测试
|
|
|
|
|
* 优化代码组织结构,精简代码
|
2020-09-12 09:00:08 +08:00
|
|
|
|
* 新增对xorm结构体的json输出时间格式化支持,支持输出多种标准时间格式
|
2020-09-12 09:17:14 +08:00
|
|
|
|
* 新增AddWeeks(N)方法获取N周后时间
|
|
|
|
|
* 新增AddWeek()方法获取1周后时间
|
|
|
|
|
* 新增SubWeeks(N)方法获取N周前时间
|
|
|
|
|
* 新增SubWeek()方法获取1周前时间
|
|
|
|
|
|
2020-09-09 10:57:19 +08:00
|
|
|
|
##### 2020-09-09
|
2020-09-09 20:23:03 +08:00
|
|
|
|
* 修复readme.md错误描述
|
|
|
|
|
* 完善单元测试
|
2020-09-12 09:00:08 +08:00
|
|
|
|
* 新增对gorm结构体的json输出时间格式化支持,支持输出多种标准时间格式
|
2020-09-13 19:04:34 +08:00
|
|
|
|
* 新增IsJanuary()方法判断是否是一月
|
|
|
|
|
* 新增IsFebruary()方法判断是否是二月
|
|
|
|
|
* 新增IsMarch()方法判断是否是三月
|
|
|
|
|
* 新增IsApril()方法判断是否是四月
|
|
|
|
|
* 新增IsMay()方法判断是否是五月
|
|
|
|
|
* 新增IsJune()方法判断是否是六月
|
|
|
|
|
* 新增IsJuly()方法判断是否是七月
|
|
|
|
|
* 新增IsAugust()方法判断是否是八月
|
|
|
|
|
* 新增IsSeptember()方法判断是否是九月
|
|
|
|
|
* 新增IsOctober()方法判断是否是十月
|
|
|
|
|
* 新增IsNovember()方法判断是否是十一月
|
|
|
|
|
* 新增IsDecember()方法判断是否是十二月
|
2020-09-09 10:57:19 +08:00
|
|
|
|
|
2020-09-08 16:05:04 +08:00
|
|
|
|
##### 2020-09-08
|
|
|
|
|
* 修复已知BUG
|
|
|
|
|
* 添加单元测试
|
2020-09-13 07:31:26 +08:00
|
|
|
|
* 新增FirstOfYear()方法获取年初第一天
|
|
|
|
|
* 新增LastOfYear()方法获取年末最后一天
|
|
|
|
|
* 新增FirstOfMonth()方法获取月初第一天
|
|
|
|
|
* 新增LastOfMonth()方法获取月末最后一天
|
|
|
|
|
* 新增IsFirstOfYaer()方法判断是否年初第一天
|
|
|
|
|
* 新增IsLastOfYear()方法判断是否年末最后一天
|
|
|
|
|
* 新增IsFirstOfMonth()方法判断是否月初第一天
|
2020-09-30 23:13:46 +08:00
|
|
|
|
* 新增IsLastOfMonth()方法判断是否月末最后一天
|