mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-04 12:52:28 +08:00
183 lines
5.1 KiB
Go
183 lines
5.1 KiB
Go
// Copyright 2021 dudaodong@gmail.com. All rights reserved.
|
|
// Use of this source code is governed by MIT license.
|
|
|
|
// Package datetime implements some functions to format date and time.
|
|
// Note:
|
|
// 1. `format` param in FormatTimeToStr function should be as flow:
|
|
//"yyyy-mm-dd hh:mm:ss"
|
|
//"yyyy-mm-dd hh:mm"
|
|
//"yyyy-mm-dd hh"
|
|
//"yyyy-mm-dd"
|
|
//"yyyy-mm"
|
|
//"mm-dd"
|
|
//"dd-mm-yy hh:mm:ss"
|
|
//"yyyy/mm/dd hh:mm:ss"
|
|
//"yyyy/mm/dd hh:mm"
|
|
//"yyyy/mm/dd hh"
|
|
//"yyyy/mm/dd"
|
|
//"yyyy/mm"
|
|
//"mm/dd"
|
|
//"dd/mm/yy hh:mm:ss"
|
|
//"yyyy"
|
|
//"mm"
|
|
//"hh:mm:ss"
|
|
//"mm:ss"
|
|
package datetime
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
var timeFormat map[string]string
|
|
|
|
func init() {
|
|
timeFormat = map[string]string{
|
|
"yyyy-mm-dd hh:mm:ss": "2006-01-02 15:04:05",
|
|
"yyyy-mm-dd hh:mm": "2006-01-02 15:04",
|
|
"yyyy-mm-dd hh": "2006-01-02 15:04",
|
|
"yyyy-mm-dd": "2006-01-02",
|
|
"yyyy-mm": "2006-01",
|
|
"mm-dd": "01-02",
|
|
"dd-mm-yy hh:mm:ss": "02-01-06 15:04:05",
|
|
"yyyy/mm/dd hh:mm:ss": "2006/01/02 15:04:05",
|
|
"yyyy/mm/dd hh:mm": "2006/01/02 15:04",
|
|
"yyyy/mm/dd hh": "2006/01/02 15",
|
|
"yyyy/mm/dd": "2006/01/02",
|
|
"yyyy/mm": "2006/01",
|
|
"mm/dd": "01/02",
|
|
"dd/mm/yy hh:mm:ss": "02/01/06 15:04:05",
|
|
"yyyy": "2006",
|
|
"mm": "01",
|
|
"hh:mm:ss": "15:04:05",
|
|
"mm:ss": "04:05",
|
|
}
|
|
}
|
|
|
|
// AddMinute add or sub minute to the time
|
|
func AddMinute(t time.Time, minute int64) time.Time {
|
|
return t.Add(time.Minute * time.Duration(minute))
|
|
}
|
|
|
|
// AddHour add or sub hour to the time
|
|
func AddHour(t time.Time, hour int64) time.Time {
|
|
return t.Add(time.Hour * time.Duration(hour))
|
|
}
|
|
|
|
// AddDay add or sub day to the time
|
|
func AddDay(t time.Time, day int64) time.Time {
|
|
return t.Add(24 * time.Hour * time.Duration(day))
|
|
}
|
|
|
|
// GetNowDate return format yyyy-mm-dd of current date
|
|
func GetNowDate() string {
|
|
return time.Now().Format("2006-01-02")
|
|
}
|
|
|
|
// GetNowTime return format hh-mm-ss of current time
|
|
func GetNowTime() string {
|
|
return time.Now().Format("15:04:05")
|
|
}
|
|
|
|
// GetNowDateTime return format yyyy-mm-dd hh-mm-ss of current datetime
|
|
func GetNowDateTime() string {
|
|
return time.Now().Format("2006-01-02 15:04:05")
|
|
}
|
|
|
|
// GetZeroHourTimestamp return timestamp of zero hour (timestamp of 00:00)
|
|
func GetZeroHourTimestamp() int64 {
|
|
ts := time.Now().Format("2006-01-02")
|
|
t, _ := time.Parse("2006-01-02", ts)
|
|
return t.UTC().Unix() - 8*3600
|
|
}
|
|
|
|
// GetNightTimestamp return timestamp of zero hour (timestamp of 23:59)
|
|
func GetNightTimestamp() int64 {
|
|
return GetZeroHourTimestamp() + 86400 - 1
|
|
}
|
|
|
|
// FormatTimeToStr convert time to string
|
|
func FormatTimeToStr(t time.Time, format string) string {
|
|
return t.Format(timeFormat[format])
|
|
}
|
|
|
|
// FormatStrToTime convert string to time
|
|
func FormatStrToTime(str, format string) (time.Time, error) {
|
|
v, ok := timeFormat[format]
|
|
if !ok {
|
|
return time.Time{}, fmt.Errorf("format %s not found", format)
|
|
}
|
|
|
|
return time.Parse(v, str)
|
|
}
|
|
|
|
// BeginOfMinute return beginning minute time of day
|
|
func BeginOfMinute(t time.Time) time.Time {
|
|
y, m, d := t.Date()
|
|
return time.Date(y, m, d, t.Hour(), t.Minute(), 0, 0, t.Location())
|
|
}
|
|
|
|
// EndOfMinute return end minute time of day
|
|
func EndOfMinute(t time.Time) time.Time {
|
|
y, m, d := t.Date()
|
|
return time.Date(y, m, d, t.Hour(), t.Minute(), 59, int(time.Second-time.Nanosecond), t.Location())
|
|
}
|
|
|
|
// BeginOfHour return beginning hour time of day
|
|
func BeginOfHour(t time.Time) time.Time {
|
|
y, m, d := t.Date()
|
|
return time.Date(y, m, d, t.Hour(), 0, 0, 0, t.Location())
|
|
}
|
|
|
|
// EndOfHour return end hour time of day
|
|
func EndOfHour(t time.Time) time.Time {
|
|
y, m, d := t.Date()
|
|
return time.Date(y, m, d, t.Hour(), 59, 59, int(time.Second-time.Nanosecond), t.Location())
|
|
}
|
|
|
|
// BeginOfDay return beginning hour time of day
|
|
func BeginOfDay(t time.Time) time.Time {
|
|
y, m, d := t.Date()
|
|
return time.Date(y, m, d, 0, 0, 0, 0, t.Location())
|
|
}
|
|
|
|
// EndOfDay return end time of day
|
|
func EndOfDay(t time.Time) time.Time {
|
|
y, m, d := t.Date()
|
|
return time.Date(y, m, d, 23, 59, 59, int(time.Second-time.Nanosecond), t.Location())
|
|
}
|
|
|
|
// BeginOfWeek return beginning week, week begin from Sunday
|
|
func BeginOfWeek(t time.Time) time.Time {
|
|
y, m, d := t.AddDate(0, 0, 0-int(BeginOfDay(t).Weekday())).Date()
|
|
return time.Date(y, m, d, 0, 0, 0, 0, t.Location())
|
|
}
|
|
|
|
// EndOfWeek return end week time, week end with Saturday
|
|
func EndOfWeek(t time.Time) time.Time {
|
|
y, m, d := BeginOfWeek(t).AddDate(0, 0, 7).Add(-time.Nanosecond).Date()
|
|
return time.Date(y, m, d, 23, 59, 59, int(time.Second-time.Nanosecond), t.Location())
|
|
}
|
|
|
|
// BeginOfMonth return beginning of month
|
|
func BeginOfMonth(t time.Time) time.Time {
|
|
y, m, _ := t.Date()
|
|
return time.Date(y, m, 1, 0, 0, 0, 0, t.Location())
|
|
}
|
|
|
|
// EndOfMonth return end of month
|
|
func EndOfMonth(t time.Time) time.Time {
|
|
return BeginOfMonth(t).AddDate(0, 1, 0).Add(-time.Nanosecond)
|
|
}
|
|
|
|
// BeginOfYear return beginning of year
|
|
func BeginOfYear(t time.Time) time.Time {
|
|
y, _, _ := t.Date()
|
|
return time.Date(y, time.January, 1, 0, 0, 0, 0, t.Location())
|
|
}
|
|
|
|
// EndOfYear return end of year
|
|
func EndOfYear(t time.Time) time.Time {
|
|
return BeginOfYear(t).AddDate(1, 0, 0).Add(-time.Nanosecond)
|
|
}
|