|
@@ -33,7 +33,6 @@ var (
|
|
|
KEY = []byte("5Mb5Gdmb5y")
|
|
|
)
|
|
|
|
|
|
-// GenToken 发放token
|
|
|
func GenToken(account string) string {
|
|
|
token := jwt.New(jwt.SigningMethodHS256)
|
|
|
token.Claims = &jwt.StandardClaims{
|
|
@@ -50,10 +49,8 @@ func GenToken(account string) string {
|
|
|
return ss
|
|
|
}
|
|
|
|
|
|
-// 随机数种子
|
|
|
var rnd = rand.New(rand.NewSource(time.Now().UnixNano()))
|
|
|
|
|
|
-// GetRandString 获取随机字符串
|
|
|
func GetRandString(size int) string {
|
|
|
allLetterDigit := []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "!", "@", "#", "$", "%", "^", "&", "*"}
|
|
|
randomSb := ""
|
|
@@ -64,7 +61,6 @@ func GetRandString(size int) string {
|
|
|
return randomSb
|
|
|
}
|
|
|
|
|
|
-// GetRandStringNoSpecialChar
|
|
|
func GetRandStringNoSpecialChar(size int) string {
|
|
|
allLetterDigit := []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}
|
|
|
randomSb := ""
|
|
@@ -75,7 +71,6 @@ func GetRandStringNoSpecialChar(size int) string {
|
|
|
return randomSb
|
|
|
}
|
|
|
|
|
|
-// StringsToJSON
|
|
|
func StringsToJSON(str string) string {
|
|
|
rs := []rune(str)
|
|
|
jsons := ""
|
|
@@ -90,29 +85,24 @@ func StringsToJSON(str string) string {
|
|
|
return jsons
|
|
|
}
|
|
|
|
|
|
-// ToString 序列化
|
|
|
func ToString(v interface{}) string {
|
|
|
data, _ := json.Marshal(v)
|
|
|
return string(data)
|
|
|
}
|
|
|
|
|
|
-// MD5 md5加密
|
|
|
func MD5(data string) string {
|
|
|
m := md5.Sum([]byte(data))
|
|
|
return hex.EncodeToString(m[:])
|
|
|
}
|
|
|
|
|
|
-// GetRandDigit 获取数字随机字符
|
|
|
func GetRandDigit(n int) string {
|
|
|
return fmt.Sprintf("%0"+strconv.Itoa(n)+"d", rnd.Intn(int(math.Pow10(n))))
|
|
|
}
|
|
|
|
|
|
-// GetRandNumber 获取随机数
|
|
|
func GetRandNumber(n int) int {
|
|
|
return rnd.Intn(n)
|
|
|
}
|
|
|
|
|
|
-// GetRandInt
|
|
|
func GetRandInt(min, max int) int {
|
|
|
if min >= max || min == 0 || max == 0 {
|
|
|
return max
|
|
@@ -120,20 +110,17 @@ func GetRandInt(min, max int) int {
|
|
|
return rand.Intn(max-min) + min
|
|
|
}
|
|
|
|
|
|
-// GetToday 获取今天的随机字符
|
|
|
func GetToday(format string) string {
|
|
|
today := time.Now().Format(format)
|
|
|
return today
|
|
|
}
|
|
|
|
|
|
-// GetTodayLastSecond 获取今天剩余秒数
|
|
|
func GetTodayLastSecond() time.Duration {
|
|
|
today := GetToday(FormatDate) + " 23:59:59"
|
|
|
end, _ := time.ParseInLocation(FormatDateTime, today, time.Local)
|
|
|
return time.Duration(end.Unix()-time.Now().Local().Unix()) * time.Second
|
|
|
}
|
|
|
|
|
|
-// GetBrithDate 处理出生日期函数
|
|
|
func GetBrithDate(idcard string) string {
|
|
|
l := len(idcard)
|
|
|
var s string
|
|
@@ -148,7 +135,6 @@ func GetBrithDate(idcard string) string {
|
|
|
return GetToday(FormatDate)
|
|
|
}
|
|
|
|
|
|
-// WhichSexByIdcard 处理性别
|
|
|
func WhichSexByIdcard(idcard string) string {
|
|
|
var sexs = [2]string{"女", "男"}
|
|
|
length := len(idcard)
|
|
@@ -162,7 +148,6 @@ func WhichSexByIdcard(idcard string) string {
|
|
|
return "男"
|
|
|
}
|
|
|
|
|
|
-// SubFloatToString 截取小数点后几位
|
|
|
func SubFloatToString(f float64, m int) string {
|
|
|
n := strconv.FormatFloat(f, 'f', -1, 64)
|
|
|
if n == "" {
|
|
@@ -181,20 +166,17 @@ func SubFloatToString(f float64, m int) string {
|
|
|
return newn[0] + "." + newn[1][:m]
|
|
|
}
|
|
|
|
|
|
-// SubFloatToFloat 截取小数点后几位
|
|
|
func SubFloatToFloat(f float64, m int) float64 {
|
|
|
newn := SubFloatToString(f, m)
|
|
|
newf, _ := strconv.ParseFloat(newn, 64)
|
|
|
return newf
|
|
|
}
|
|
|
|
|
|
-// SubFloatToFloatStr 截取小数点后几位
|
|
|
func SubFloatToFloatStr(f float64, m int) string {
|
|
|
newn := SubFloatToString(f, m)
|
|
|
return newn
|
|
|
}
|
|
|
|
|
|
-// GetYearDiffer 获取相差时间-年
|
|
|
func GetYearDiffer(start_time, end_time string) int {
|
|
|
t1, _ := time.ParseInLocation("2006-01-02", start_time, time.Local)
|
|
|
t2, _ := time.ParseInLocation("2006-01-02", end_time, time.Local)
|
|
@@ -205,20 +187,17 @@ func GetYearDiffer(start_time, end_time string) int {
|
|
|
return age
|
|
|
}
|
|
|
|
|
|
-// GetSecondDifferByTime 获取相差时间-秒
|
|
|
func GetSecondDifferByTime(start_time, end_time time.Time) int64 {
|
|
|
diff := end_time.Unix() - start_time.Unix()
|
|
|
return diff
|
|
|
}
|
|
|
|
|
|
-// FixFloat
|
|
|
func FixFloat(f float64, m int) float64 {
|
|
|
newn := SubFloatToString(f+0.00000001, m)
|
|
|
newf, _ := strconv.ParseFloat(newn, 64)
|
|
|
return newf
|
|
|
}
|
|
|
|
|
|
-// StrListToString 将字符串数组转化为逗号分割的字符串形式 ["str1","str2","str3"] >>> "str1,str2,str3"
|
|
|
func StrListToString(strList []string) (str string) {
|
|
|
if len(strList) > 0 {
|
|
|
for k, v := range strList {
|
|
@@ -233,25 +212,21 @@ func StrListToString(strList []string) (str string) {
|
|
|
return ""
|
|
|
}
|
|
|
|
|
|
-// ValidateEmailFormatat 校验邮箱格式
|
|
|
func ValidateEmailFormatat(email string) bool {
|
|
|
reg := regexp.MustCompile(RegularEmail)
|
|
|
return reg.MatchString(email)
|
|
|
}
|
|
|
|
|
|
-// ValidateMobileFormatat 验证是否是手机号
|
|
|
func ValidateMobileFormatat(mobileNum string) bool {
|
|
|
reg := regexp.MustCompile(RegularMobile)
|
|
|
return reg.MatchString(mobileNum)
|
|
|
}
|
|
|
|
|
|
-// FileIsExist 判断文件是否存在
|
|
|
func FileIsExist(filePath string) bool {
|
|
|
_, err := os.Stat(filePath)
|
|
|
return err == nil || os.IsExist(err)
|
|
|
}
|
|
|
|
|
|
-// GetImgExt 获取图片扩展名
|
|
|
func GetImgExt(file string) (ext string, err error) {
|
|
|
var headerByte []byte
|
|
|
headerByte = make([]byte, 8)
|
|
@@ -294,17 +269,13 @@ func GetImgExt(file string) (ext string, err error) {
|
|
|
return ext, nil
|
|
|
}
|
|
|
|
|
|
-// SaveImage 保存图片
|
|
|
func SaveImage(path string, img image.Image) (err error) {
|
|
|
- //需要保持的文件
|
|
|
imgfile, err := os.Create(path)
|
|
|
defer imgfile.Close()
|
|
|
- // 以PNG格式保存文件
|
|
|
err = png.Encode(imgfile, img)
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
-// DownloadImage 下载图片
|
|
|
func DownloadImage(imgUrl string) (filePath string, err error) {
|
|
|
imgPath := "./static/imgs/"
|
|
|
fileName := path.Base(imgUrl)
|
|
@@ -314,7 +285,6 @@ func DownloadImage(imgUrl string) (filePath string, err error) {
|
|
|
return
|
|
|
}
|
|
|
defer res.Body.Close()
|
|
|
- // 获得get请求响应的reader对象
|
|
|
reader := bufio.NewReaderSize(res.Body, 32*1024)
|
|
|
|
|
|
filePath = imgPath + fileName
|
|
@@ -322,7 +292,6 @@ func DownloadImage(imgUrl string) (filePath string, err error) {
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
- // 获得文件的writer对象
|
|
|
writer := bufio.NewWriter(file)
|
|
|
|
|
|
written, _ := io.Copy(writer, reader)
|
|
@@ -330,7 +299,6 @@ func DownloadImage(imgUrl string) (filePath string, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// SaveBase64ToFile 保存base64数据为文件
|
|
|
func SaveBase64ToFile(content, path string) error {
|
|
|
data, err := base64.StdEncoding.DecodeString(content)
|
|
|
if err != nil {
|
|
@@ -345,7 +313,6 @@ func SaveBase64ToFile(content, path string) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-// SaveBase64ToFileBySeek
|
|
|
func SaveBase64ToFileBySeek(content, path string) (err error) {
|
|
|
data, err := base64.StdEncoding.DecodeString(content)
|
|
|
exist, err := PathExists(path)
|
|
@@ -358,7 +325,6 @@ func SaveBase64ToFileBySeek(content, path string) (err error) {
|
|
|
return err
|
|
|
}
|
|
|
n, _ := f.Seek(0, 2)
|
|
|
- // 从末尾的偏移量开始写入内容
|
|
|
_, err = f.WriteAt([]byte(data), n)
|
|
|
defer f.Close()
|
|
|
} else {
|
|
@@ -367,7 +333,6 @@ func SaveBase64ToFileBySeek(content, path string) (err error) {
|
|
|
return err
|
|
|
}
|
|
|
n, _ := f.Seek(0, 2)
|
|
|
- // 从末尾的偏移量开始写入内容
|
|
|
_, err = f.WriteAt([]byte(data), n)
|
|
|
defer f.Close()
|
|
|
}
|
|
@@ -375,7 +340,6 @@ func SaveBase64ToFileBySeek(content, path string) (err error) {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-// StartIndex 开始下标
|
|
|
func StartIndex(page, pagesize int) int {
|
|
|
if page > 1 {
|
|
|
return (page - 1) * pagesize
|
|
@@ -383,7 +347,6 @@ func StartIndex(page, pagesize int) int {
|
|
|
return 0
|
|
|
}
|
|
|
|
|
|
-// PageCount
|
|
|
func PageCount(count, pagesize int) int {
|
|
|
if count%pagesize > 0 {
|
|
|
return count/pagesize + 1
|
|
@@ -392,9 +355,7 @@ func PageCount(count, pagesize int) int {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-// TrimHtml
|
|
|
func TrimHtml(src string) string {
|
|
|
- //将HTML标签全转换成小写
|
|
|
re, _ := regexp.Compile("\\<[\\S\\s]+?\\>")
|
|
|
src = re.ReplaceAllStringFunc(src, strings.ToLower)
|
|
|
|
|
@@ -408,9 +369,6 @@ func TrimHtml(src string) string {
|
|
|
return strings.TrimSpace(src)
|
|
|
}
|
|
|
|
|
|
-// 1556164246 -> 2019-04-25 03:50:46 +0000
|
|
|
-// timestamp
|
|
|
-// TimeToTimestamp
|
|
|
func TimeToTimestamp() {
|
|
|
fmt.Println(time.Unix(1556164246, 0).Format("2006-01-02 15:04:05"))
|
|
|
}
|
|
@@ -424,21 +382,18 @@ func TimeTransferString(format string, t time.Time) string {
|
|
|
return str
|
|
|
}
|
|
|
|
|
|
-// ToUnicode
|
|
|
func ToUnicode(text string) string {
|
|
|
textQuoted := strconv.QuoteToASCII(text)
|
|
|
textUnquoted := textQuoted[1 : len(textQuoted)-1]
|
|
|
return textUnquoted
|
|
|
}
|
|
|
|
|
|
-// VersionToInt
|
|
|
func VersionToInt(version string) int {
|
|
|
version = strings.Replace(version, ".", "", -1)
|
|
|
n, _ := strconv.Atoi(version)
|
|
|
return n
|
|
|
}
|
|
|
|
|
|
-// IsCheckInList
|
|
|
func IsCheckInList(list []int, s int) bool {
|
|
|
for _, v := range list {
|
|
|
if v == s {
|
|
@@ -449,18 +404,15 @@ func IsCheckInList(list []int, s int) bool {
|
|
|
|
|
|
}
|
|
|
|
|
|
-// round
|
|
|
func round(num float64) int {
|
|
|
return int(num + math.Copysign(0.5, num))
|
|
|
}
|
|
|
|
|
|
-// toFixed
|
|
|
func toFixed(num float64, precision int) float64 {
|
|
|
output := math.Pow(10, float64(precision))
|
|
|
return float64(round(num*output)) / output
|
|
|
}
|
|
|
|
|
|
-// GetWilsonScore returns Wilson Score
|
|
|
func GetWilsonScore(p, n float64) float64 {
|
|
|
if p == 0 && n == 0 {
|
|
|
return 0
|
|
@@ -469,7 +421,6 @@ func GetWilsonScore(p, n float64) float64 {
|
|
|
return toFixed(((p+1.9208)/(p+n)-1.96*math.Sqrt(p*n/(p+n)+0.9604)/(p+n))/(1+3.8416/(p+n)), 2)
|
|
|
}
|
|
|
|
|
|
-// 将中文数字转化成数字,比如 第三百四十五章,返回第345章 不支持一亿及以上
|
|
|
func ChangeWordsToNum(str string) (numStr string) {
|
|
|
words := ([]rune)(str)
|
|
|
num := 0
|
|
@@ -547,14 +498,12 @@ func ChangeWordsToNum(str string) (numStr string) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// Sha1
|
|
|
func Sha1(data string) string {
|
|
|
sha1 := sha1.New()
|
|
|
sha1.Write([]byte(data))
|
|
|
return hex.EncodeToString(sha1.Sum([]byte("")))
|
|
|
}
|
|
|
|
|
|
-// GetVideoPlaySeconds
|
|
|
func GetVideoPlaySeconds(videoPath string) (playSeconds float64, err error) {
|
|
|
cmd := `ffmpeg -i ` + videoPath + ` 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//`
|
|
|
out, err := exec.Command("bash", "-c", cmd).Output()
|
|
@@ -588,7 +537,6 @@ func GetVideoPlaySeconds(videoPath string) (playSeconds float64, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// GetMaxTradeCode
|
|
|
func GetMaxTradeCode(tradeCode string) (maxTradeCode string, err error) {
|
|
|
tradeCode = strings.Replace(tradeCode, "W", "", -1)
|
|
|
tradeCode = strings.Trim(tradeCode, " ")
|
|
@@ -601,25 +549,17 @@ func GetMaxTradeCode(tradeCode string) (maxTradeCode string, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// ConvertToFormatDay excel日期字段格式化 yyyy-mm-dd
|
|
|
func ConvertToFormatDay(excelDaysString string) string {
|
|
|
- // 2006-01-02 距离 1900-01-01的天数
|
|
|
baseDiffDay := 38719 //在网上工具计算的天数需要加2天,什么原因没弄清楚
|
|
|
curDiffDay := excelDaysString
|
|
|
b, _ := strconv.Atoi(curDiffDay)
|
|
|
- // 获取excel的日期距离2006-01-02的天数
|
|
|
realDiffDay := b - baseDiffDay
|
|
|
- //fmt.Println("realDiffDay:",realDiffDay)
|
|
|
- // 距离2006-01-02 秒数
|
|
|
realDiffSecond := realDiffDay * 24 * 3600
|
|
|
- //fmt.Println("realDiffSecond:",realDiffSecond)
|
|
|
- // 2006-01-02 15:04:05距离1970-01-01 08:00:00的秒数 网上工具可查出
|
|
|
baseOriginSecond := 1136185445
|
|
|
resultTime := time.Unix(int64(baseOriginSecond+realDiffSecond), 0).Format("2006-01-02")
|
|
|
return resultTime
|
|
|
}
|
|
|
|
|
|
-// CheckPwd
|
|
|
func CheckPwd(pwd string) bool {
|
|
|
compile := `([0-9a-z]+){6,12}|(a-z0-9]+){6,12}`
|
|
|
reg := regexp.MustCompile(compile)
|
|
@@ -627,9 +567,7 @@ func CheckPwd(pwd string) bool {
|
|
|
return flag
|
|
|
}
|
|
|
|
|
|
-// GetMonthStartAndEnd
|
|
|
func GetMonthStartAndEnd(myYear string, myMonth string) (startDate, endDate string) {
|
|
|
- // 数字月份必须前置补零
|
|
|
if len(myMonth) == 1 {
|
|
|
myMonth = "0" + myMonth
|
|
|
}
|
|
@@ -645,12 +583,10 @@ func GetMonthStartAndEnd(myYear string, myMonth string) (startDate, endDate stri
|
|
|
return t1, t2
|
|
|
}
|
|
|
|
|
|
-// TrimStr 移除字符串中的空格
|
|
|
func TrimStr(str string) (str2 string) {
|
|
|
return strings.Replace(str, " ", "", -1)
|
|
|
}
|
|
|
|
|
|
-// StrTimeToTime 字符串转换为time
|
|
|
func StrTimeToTime(strTime string) time.Time {
|
|
|
timeLayout := "2006-01-02 15:04:05" //转化所需模板
|
|
|
loc, _ := time.LoadLocation("Local") //重要:获取时区
|
|
@@ -658,7 +594,6 @@ func StrTimeToTime(strTime string) time.Time {
|
|
|
return resultTime
|
|
|
}
|
|
|
|
|
|
-// StrDateTimeToWeek 字符串类型时间转周几
|
|
|
func StrDateTimeToWeek(strTime string) string {
|
|
|
var WeekDayMap = map[string]string{
|
|
|
"Monday": "周一",
|
|
@@ -675,7 +610,6 @@ func StrDateTimeToWeek(strTime string) string {
|
|
|
return WeekDayMap[staweek_int]
|
|
|
}
|
|
|
|
|
|
-// TimeToStrYmd 时间格式转年月日字符串
|
|
|
func TimeToStrYmd(time2 time.Time) string {
|
|
|
var Ymd string
|
|
|
year := time2.Year()
|
|
@@ -685,7 +619,6 @@ func TimeToStrYmd(time2 time.Time) string {
|
|
|
return Ymd
|
|
|
}
|
|
|
|
|
|
-// TimeRemoveHms 时间格式去掉时分秒
|
|
|
func TimeRemoveHms(strTime string) string {
|
|
|
var Ymd string
|
|
|
var resultTime = StrTimeToTime(strTime)
|
|
@@ -696,7 +629,6 @@ func TimeRemoveHms(strTime string) string {
|
|
|
return Ymd
|
|
|
}
|
|
|
|
|
|
-// ArticleLastTime 文章上一次编辑时间
|
|
|
func ArticleLastTime(strTime string) string {
|
|
|
var newTime string
|
|
|
stamp, _ := time.ParseInLocation("2006-01-02 15:04:05", strTime, time.Local)
|
|
@@ -717,11 +649,9 @@ func ArticleLastTime(strTime string) string {
|
|
|
return newTime
|
|
|
}
|
|
|
|
|
|
-// ConvertNumToCny 人民币小写转大写
|
|
|
func ConvertNumToCny(num float64) (str string, err error) {
|
|
|
strNum := strconv.FormatFloat(num*100, 'f', 0, 64)
|
|
|
sliceUnit := []string{"仟", "佰", "拾", "亿", "仟", "佰", "拾", "万", "仟", "佰", "拾", "元", "角", "分"}
|
|
|
- // log.Println(sliceUnit[:len(sliceUnit)-2])
|
|
|
s := sliceUnit[len(sliceUnit)-len(strNum):]
|
|
|
upperDigitUnit := map[string]string{"0": "零", "1": "壹", "2": "贰", "3": "叁", "4": "肆", "5": "伍", "6": "陆", "7": "柒", "8": "捌", "9": "玖"}
|
|
|
for k, v := range strNum[:] {
|
|
@@ -759,7 +689,6 @@ func ConvertNumToCny(num float64) (str string, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// GetNowWeekMonday 获取本周周一的时间
|
|
|
func GetNowWeekMonday() time.Time {
|
|
|
offset := int(time.Monday - time.Now().Weekday())
|
|
|
if offset == 1 { //正好是周日,但是按照中国人的理解,周日是一周最后一天,而不是一周开始的第一天
|
|
@@ -770,7 +699,6 @@ func GetNowWeekMonday() time.Time {
|
|
|
return mondayTime
|
|
|
}
|
|
|
|
|
|
-// GetNowWeekLastDay 获取本周最后一天的时间
|
|
|
func GetNowWeekLastDay() time.Time {
|
|
|
offset := int(time.Monday - time.Now().Weekday())
|
|
|
if offset == 1 { //正好是周日,但是按照中国人的理解,周日是一周最后一天,而不是一周开始的第一天
|
|
@@ -783,28 +711,23 @@ func GetNowWeekLastDay() time.Time {
|
|
|
return lastDayTime
|
|
|
}
|
|
|
|
|
|
-// GetNowMonthFirstDay 获取本月第一天的时间
|
|
|
func GetNowMonthFirstDay() time.Time {
|
|
|
nowMonthFirstDay := time.Date(time.Now().Year(), time.Now().Month(), 1, 0, 0, 0, 0, time.Now().Location())
|
|
|
return nowMonthFirstDay
|
|
|
}
|
|
|
|
|
|
-// GetNowMonthLastDay 获取本月最后一天的时间
|
|
|
func GetNowMonthLastDay() time.Time {
|
|
|
nowMonthLastDay := time.Date(time.Now().Year(), time.Now().Month(), 1, 0, 0, 0, 0, time.Now().Location()).AddDate(0, 1, -1)
|
|
|
nowMonthLastDay = time.Date(nowMonthLastDay.Year(), nowMonthLastDay.Month(), nowMonthLastDay.Day(), 23, 59, 59, 0, nowMonthLastDay.Location())
|
|
|
return nowMonthLastDay
|
|
|
}
|
|
|
|
|
|
-// GetNowQuarterFirstDay 获取本季度第一天的时间
|
|
|
func GetNowQuarterFirstDay() time.Time {
|
|
|
month := int(time.Now().Month())
|
|
|
var nowQuarterFirstDay time.Time
|
|
|
if month >= 1 && month <= 3 {
|
|
|
- //1月1号
|
|
|
nowQuarterFirstDay = time.Date(time.Now().Year(), 1, 1, 0, 0, 0, 0, time.Now().Location())
|
|
|
} else if month >= 4 && month <= 6 {
|
|
|
- //4月1号
|
|
|
nowQuarterFirstDay = time.Date(time.Now().Year(), 4, 1, 0, 0, 0, 0, time.Now().Location())
|
|
|
} else if month >= 7 && month <= 9 {
|
|
|
nowQuarterFirstDay = time.Date(time.Now().Year(), 7, 1, 0, 0, 0, 0, time.Now().Location())
|
|
@@ -814,96 +737,71 @@ func GetNowQuarterFirstDay() time.Time {
|
|
|
return nowQuarterFirstDay
|
|
|
}
|
|
|
|
|
|
-// GetNowQuarterLastDay 获取本季度最后一天的时间
|
|
|
func GetNowQuarterLastDay() time.Time {
|
|
|
month := int(time.Now().Month())
|
|
|
var nowQuarterLastDay time.Time
|
|
|
if month >= 1 && month <= 3 {
|
|
|
- //03-31 23:59:59
|
|
|
nowQuarterLastDay = time.Date(time.Now().Year(), 3, 31, 23, 59, 59, 0, time.Now().Location())
|
|
|
} else if month >= 4 && month <= 6 {
|
|
|
- //06-30 23:59:59
|
|
|
nowQuarterLastDay = time.Date(time.Now().Year(), 6, 30, 23, 59, 59, 0, time.Now().Location())
|
|
|
} else if month >= 7 && month <= 9 {
|
|
|
- //09-30 23:59:59
|
|
|
nowQuarterLastDay = time.Date(time.Now().Year(), 9, 30, 23, 59, 59, 0, time.Now().Location())
|
|
|
} else {
|
|
|
- //12-31 23:59:59
|
|
|
nowQuarterLastDay = time.Date(time.Now().Year(), 12, 31, 23, 59, 59, 0, time.Now().Location())
|
|
|
}
|
|
|
return nowQuarterLastDay
|
|
|
}
|
|
|
|
|
|
-// GetNowHalfYearFirstDay 获取当前半年的第一天的时间
|
|
|
func GetNowHalfYearFirstDay() time.Time {
|
|
|
month := int(time.Now().Month())
|
|
|
var nowHalfYearLastDay time.Time
|
|
|
if month >= 1 && month <= 6 {
|
|
|
- //03-31 23:59:59
|
|
|
nowHalfYearLastDay = time.Date(time.Now().Year(), 1, 1, 0, 0, 0, 0, time.Now().Location())
|
|
|
} else {
|
|
|
- //12-31 23:59:59
|
|
|
nowHalfYearLastDay = time.Date(time.Now().Year(), 7, 1, 0, 0, 0, 0, time.Now().Location())
|
|
|
}
|
|
|
return nowHalfYearLastDay
|
|
|
}
|
|
|
|
|
|
-// GetNowHalfYearLastDay 获取当前半年的最后一天的时间
|
|
|
func GetNowHalfYearLastDay() time.Time {
|
|
|
month := int(time.Now().Month())
|
|
|
var nowHalfYearLastDay time.Time
|
|
|
if month >= 1 && month <= 6 {
|
|
|
- //03-31 23:59:59
|
|
|
nowHalfYearLastDay = time.Date(time.Now().Year(), 6, 30, 23, 59, 59, 0, time.Now().Location())
|
|
|
} else {
|
|
|
- //12-31 23:59:59
|
|
|
nowHalfYearLastDay = time.Date(time.Now().Year(), 12, 31, 23, 59, 59, 0, time.Now().Location())
|
|
|
}
|
|
|
return nowHalfYearLastDay
|
|
|
}
|
|
|
|
|
|
-// GetNowYearFirstDay 获取当前年的最后一天的时间
|
|
|
func GetNowYearFirstDay() time.Time {
|
|
|
- //12-31 23:59:59
|
|
|
nowYearFirstDay := time.Date(time.Now().Year(), 1, 1, 0, 0, 0, 0, time.Now().Location())
|
|
|
return nowYearFirstDay
|
|
|
}
|
|
|
|
|
|
-// GetNowYearLastDay 获取当前年的最后一天的时间
|
|
|
func GetNowYearLastDay() time.Time {
|
|
|
- //12-31 23:59:59
|
|
|
nowYearLastDay := time.Date(time.Now().Year(), 12, 31, 23, 59, 59, 0, time.Now().Location())
|
|
|
return nowYearLastDay
|
|
|
}
|
|
|
|
|
|
-// CalculationDate 计算两个日期之间相差n年m月y天
|
|
|
func CalculationDate(startDate, endDate time.Time) (beetweenDay string, err error) {
|
|
|
- //startDate := time.Date(2021, 3, 28, 0, 0, 0, 0, time.Now().Location())
|
|
|
- //endDate := time.Date(2022, 3, 31, 0, 0, 0, 0, time.Now().Location())
|
|
|
numYear := endDate.Year() - startDate.Year()
|
|
|
|
|
|
numMonth := int(endDate.Month()) - int(startDate.Month())
|
|
|
|
|
|
numDay := 0
|
|
|
- //获取截止月的总天数
|
|
|
endDateDays := getMonthDay(endDate.Year(), int(endDate.Month()))
|
|
|
|
|
|
- //获取截止月的前一个月
|
|
|
endDatePrevMonthDate := endDate.AddDate(0, -1, 0)
|
|
|
- //获取截止日期的上一个月的总天数
|
|
|
endDatePrevMonthDays := getMonthDay(endDatePrevMonthDate.Year(), int(endDatePrevMonthDate.Month()))
|
|
|
- //获取开始日期的的月份总天数
|
|
|
startDateMonthDays := getMonthDay(startDate.Year(), int(startDate.Month()))
|
|
|
|
|
|
- //判断,截止月是否完全被选中,如果相等,那么代表截止月份全部天数被选择
|
|
|
if endDate.Day() == endDateDays {
|
|
|
numDay = startDateMonthDays - startDate.Day() + 1
|
|
|
|
|
|
- //如果剩余天数正好与开始日期的天数是一致的,那么月份加1
|
|
|
if numDay == startDateMonthDays {
|
|
|
numMonth++
|
|
|
numDay = 0
|
|
|
- //超过月份了,那么年份加1
|
|
|
if numMonth == 12 {
|
|
|
numYear++
|
|
|
numMonth = 0
|
|
@@ -913,21 +811,15 @@ func CalculationDate(startDate, endDate time.Time) (beetweenDay string, err erro
|
|
|
numDay = endDate.Day() - startDate.Day() + 1
|
|
|
}
|
|
|
|
|
|
- //天数小于0,那么向月份借一位
|
|
|
if numDay < 0 {
|
|
|
- //向上一个月借一个月的天数
|
|
|
numDay += endDatePrevMonthDays
|
|
|
|
|
|
- //总月份减去一个月
|
|
|
numMonth = numMonth - 1
|
|
|
}
|
|
|
|
|
|
- //月份小于0,那么向年份借一位
|
|
|
if numMonth < 0 {
|
|
|
- //向上一个年借12个月
|
|
|
numMonth += 12
|
|
|
|
|
|
- //总年份减去一年
|
|
|
numYear = numYear - 1
|
|
|
}
|
|
|
if numYear < 0 {
|
|
@@ -947,7 +839,6 @@ func CalculationDate(startDate, endDate time.Time) (beetweenDay string, err erro
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// getMonthDay 获取某年某月有多少天
|
|
|
func getMonthDay(year, month int) (days int) {
|
|
|
if month != 2 {
|
|
|
if month == 4 || month == 6 || month == 9 || month == 11 {
|
|
@@ -966,7 +857,6 @@ func getMonthDay(year, month int) (days int) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// InArray 是否在切片(数组/map)中含有该值,目前只支持:string、int 、 int64,其他都是返回false
|
|
|
func InArray(needle interface{}, hyStack interface{}) bool {
|
|
|
switch key := needle.(type) {
|
|
|
case string:
|
|
@@ -993,14 +883,12 @@ func InArray(needle interface{}, hyStack interface{}) bool {
|
|
|
return false
|
|
|
}
|
|
|
|
|
|
-// bit转MB 保留小数
|
|
|
func Bit2MB(bitSize int64, prec int) (size float64) {
|
|
|
mb := float64(bitSize) / float64(1024*1024)
|
|
|
size, _ = strconv.ParseFloat(strconv.FormatFloat(mb, 'f', prec, 64), 64)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// SubStr 截取字符串(中文)
|
|
|
func SubStr(str string, subLen int) string {
|
|
|
strRune := []rune(str)
|
|
|
bodyRuneLen := len(strRune)
|
|
@@ -1054,13 +942,11 @@ func GetWeekZn(updateWeek string) (week string) {
|
|
|
func GetWeekDay() (string, string) {
|
|
|
now := time.Now()
|
|
|
offset := int(time.Monday - now.Weekday())
|
|
|
- //周日做特殊判断 因为time.Monday = 0
|
|
|
if offset > 0 {
|
|
|
offset = -6
|
|
|
}
|
|
|
|
|
|
lastoffset := int(time.Saturday - now.Weekday())
|
|
|
- //周日做特殊判断 因为time.Monday = 0
|
|
|
if lastoffset == 6 {
|
|
|
lastoffset = -1
|
|
|
}
|
|
@@ -1072,7 +958,6 @@ func GetWeekDay() (string, string) {
|
|
|
return time.Unix(f, 0).Format("2006-01-02") + " 00:00:00", time.Unix(l, 0).Format("2006-01-02") + " 23:59:59"
|
|
|
}
|
|
|
|
|
|
-// GetOracleInReplace 获取oracle sql的in查询替换:1的方法
|
|
|
func GetOracleInReplace(num int) string {
|
|
|
template := make([]string, num)
|
|
|
for i := 0; i < num; i++ {
|
|
@@ -1081,7 +966,6 @@ func GetOracleInReplace(num int) string {
|
|
|
return strings.Join(template, ",")
|
|
|
}
|
|
|
|
|
|
-// InArrayByInt php中的in_array(判断Int类型的切片中是否存在该Int值)
|
|
|
func InArrayByInt(idStrList []int, searchId int) (has bool) {
|
|
|
for _, id := range idStrList {
|
|
|
if id == searchId {
|
|
@@ -1092,7 +976,6 @@ func InArrayByInt(idStrList []int, searchId int) (has bool) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// InArrayByStr php中的in_array(判断String类型的切片中是否存在该Int值)
|
|
|
func InArrayByStr(idStrList []string, searchId string) (has bool) {
|
|
|
for _, id := range idStrList {
|
|
|
if id == searchId {
|