carbon/getter.go

200 lines
3.3 KiB
Go
Raw Normal View History

2021-02-18 14:32:31 +08:00
package carbon
// DaysInYear 获取本年的总天数
func (c Carbon) DaysInYear() int {
if c.IsZero() {
return 0
}
days := DaysPerNormalYear
if c.IsLeapYear() {
days = DaysPerLeapYear
}
return days
}
// DaysInMonth 获取本月的总天数
func (c Carbon) DaysInMonth() int {
if c.IsZero() {
return 0
}
return c.EndOfMonth().Time.In(c.Loc).Day()
}
2021-02-23 09:32:55 +08:00
// MonthOfYear 获取本年的第几月(从1开始)
2021-02-18 14:32:31 +08:00
func (c Carbon) MonthOfYear() int {
if c.IsZero() {
return 0
}
return int(c.Time.In(c.Loc).Month())
}
2021-02-23 09:32:55 +08:00
// DayOfYear 获取本年的第几天(从1开始)
2021-02-18 14:32:31 +08:00
func (c Carbon) DayOfYear() int {
if c.IsZero() {
return 0
}
return c.Time.In(c.Loc).YearDay()
}
2021-02-23 09:32:55 +08:00
// DayOfMonth 获取本月的第几天(从1开始)
2021-02-18 14:32:31 +08:00
func (c Carbon) DayOfMonth() int {
if c.IsZero() {
return 0
}
return c.Time.In(c.Loc).Day()
}
2021-02-23 09:32:55 +08:00
// DayOfWeek 获取本周的第几天(从1开始)
2021-02-18 14:32:31 +08:00
func (c Carbon) DayOfWeek() int {
if c.IsZero() {
return 0
}
2021-02-23 09:32:55 +08:00
day := int(c.Time.In(c.Loc).Weekday())
if day == 0 {
return DaysPerWeek
}
return day
2021-02-18 14:32:31 +08:00
}
2021-02-23 09:32:55 +08:00
// WeekOfYear 获取本年的第几周(从1开始)
2021-02-18 14:32:31 +08:00
func (c Carbon) WeekOfYear() int {
if c.IsZero() {
return 0
}
_, week := c.Time.In(c.Loc).ISOWeek()
return week
}
2021-02-23 09:32:55 +08:00
// WeekOfMonth 获取本月的第几周(从1开始)
2021-02-18 14:32:31 +08:00
func (c Carbon) WeekOfMonth() int {
if c.IsZero() {
return 0
}
day := c.Time.In(c.Loc).Day()
if day < DaysPerWeek {
return 1
}
return day%DaysPerWeek + 1
}
2021-02-18 15:43:44 +08:00
// Year 获取当前年
2021-02-18 14:32:31 +08:00
func (c Carbon) Year() int {
if c.IsZero() {
return 0
}
return c.Time.In(c.Loc).Year()
}
2021-02-18 15:43:44 +08:00
// Quarter 获取当前季度
2021-02-18 14:32:31 +08:00
func (c Carbon) Quarter() int {
if c.IsZero() {
return 0
}
switch {
2021-02-23 09:32:55 +08:00
case c.Month() >= 10:
2021-02-18 14:32:31 +08:00
return 4
2021-02-23 09:32:55 +08:00
case c.Month() >= 7:
2021-02-18 14:32:31 +08:00
return 3
2021-02-23 09:32:55 +08:00
case c.Month() >= 4:
2021-02-18 14:32:31 +08:00
return 2
2021-02-23 09:32:55 +08:00
case c.Month() >= 1:
2021-02-18 14:32:31 +08:00
return 1
2021-02-23 09:32:55 +08:00
default:
return 0
2021-02-18 14:32:31 +08:00
}
}
2021-02-18 15:43:44 +08:00
// Month 获取当前月
2021-02-18 14:32:31 +08:00
func (c Carbon) Month() int {
if c.IsZero() {
return 0
}
return c.MonthOfYear()
}
2021-02-23 09:32:55 +08:00
// Week 获取当前周(从0开始)
func (c Carbon) Week() int {
if c.IsZero() {
return -1
}
return int(c.Time.In(c.Loc).Weekday())
}
2021-02-18 15:43:44 +08:00
// Day 获取当前日
2021-02-18 14:32:31 +08:00
func (c Carbon) Day() int {
if c.IsZero() {
return 0
}
return c.DayOfMonth()
}
2021-02-18 15:43:44 +08:00
// Hour 获取当前小时
2021-02-18 14:32:31 +08:00
func (c Carbon) Hour() int {
if c.IsZero() {
return 0
}
return c.Time.In(c.Loc).Hour()
}
2021-02-18 15:43:44 +08:00
// Minute 获取当前分钟数
2021-02-18 14:32:31 +08:00
func (c Carbon) Minute() int {
if c.IsZero() {
return 0
}
return c.Time.In(c.Loc).Minute()
}
2021-02-18 15:43:44 +08:00
// Second 获取当前秒数
2021-02-18 14:32:31 +08:00
func (c Carbon) Second() int {
if c.IsZero() {
return 0
}
return c.Time.In(c.Loc).Second()
}
2021-02-18 15:43:44 +08:00
// Millisecond 获取当前毫秒数
2021-02-18 14:32:31 +08:00
func (c Carbon) Millisecond() int {
if c.IsZero() {
return 0
}
return c.Time.In(c.Loc).Nanosecond() / 1e6
}
2021-02-18 15:43:44 +08:00
// Microsecond 获取当前微秒数
2021-02-18 14:32:31 +08:00
func (c Carbon) Microsecond() int {
if c.IsZero() {
return 0
}
return c.Time.In(c.Loc).Nanosecond() / 1e9
}
2021-02-18 15:43:44 +08:00
// Nanosecond 获取当前纳秒数
2021-02-18 14:32:31 +08:00
func (c Carbon) Nanosecond() int {
if c.IsZero() {
return 0
}
return c.Time.In(c.Loc).Nanosecond()
}
2021-02-23 09:32:55 +08:00
// Timezone 获取时区
func (c Carbon) Timezone() string {
return c.Loc.String()
}
// Locale 获取语言区域
func (c Carbon) Locale() string {
return c.Lang.locale
}
// Age 获取年龄
func (c Carbon) Age() int {
if c.IsZero() {
return 0
}
now := Now()
if c.ToTimestamp() > now.ToTimestamp() {
return 0
}
return int(c.DiffInYears(now))
}