首页 > 其他分享 >Golang 几个小时前 几分钟 几天前的处理

Golang 几个小时前 几分钟 几天前的处理

时间:2022-10-22 09:33:34浏览次数:69  
标签:isContains arcTime string afterNumber 几天 几分钟 Golang time strings

在用golang爬虫的时候
总会遇到 10天前 10分钟前 刚刚这种很影响我们爬取正常事件
所以我写了个方法 来格式化这种事件

package utils

import (
	"fmt"
	"regexp"
	"strconv"
	"strings"
	"time"
)


func HoursBeforeDayBeforeFormat(arcTime string) string {
	arcTime = strings.TrimSpace(arcTime)

	timeList := [...]string{
		"小时前",
		"分钟前",
		"刚刚",
	}

	t := time.Now()                                // 获取当前时间
	currentTime := t.Format("2006-01-02 15:04:05") //获取当前格式的日期
	for _, _value := range timeList {
		isContains := strings.Contains(arcTime, _value)
		if isContains {
			nowHour := time.Now().Format("15")
			pattern := regexp.MustCompile(`\d+`)
			afterNumber := pattern.FindString(arcTime)
			if afterNumber == "" {
				if arcTime == "刚刚" {
					return currentTime
				} else {
					return "请传入带有数字类型 比如:5小时前"
				}
			}

			if afterNumber <= nowHour {
				return currentTime
			} else if strings.Contains(arcTime, "分钟前") {
				return currentTime
			} else {
				beforeDay := t.AddDate(0, 0, -1)
				return beforeDay.Format("2006-01-02 15:04:05")
			}
		}
	}

	if strings.Contains(arcTime, "天前") {
		pattern := regexp.MustCompile(`\d+`)
		afterNumber, err := strconv.Atoi(fmt.Sprint("-", pattern.FindString(arcTime)))
		if err != nil {
			return fmt.Sprintln(arcTime, "正则提取错误")
		}

		return fmt.Sprintln(t.AddDate(0, 0, afterNumber).Format("2006-01-02 15:04:05"))
	} else {
		return arcTime
	}

}

标签:isContains,arcTime,string,afterNumber,几天,几分钟,Golang,time,strings
From: https://www.cnblogs.com/zichliang/p/16815328.html

相关文章

  • Golang 和 Python 随机生成N位字符串
    Golang:funcRandomString(nint)string{ varletters=[]byte("ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789") result:=make([]byte,n) /......
  • Golang基础-运算符
    运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等运算符分为:算术运算符:+、-、*、/,%,++,--赋值运算符:=、+=、-=、*=、/=、%=关系运算符:==、!=、>、<、>=、<=......
  • Golang基础-变量与数据类型
    变量变量的定义1.声明2.赋值3.使用//声明:var变量名变量类型varnamestring//赋值:name="xiaoming"//使用:fmt.Println(name)//声明+赋值//var变......
  • golang中的切片
    索引:https://waterflow.link/articles/1666277946416在go中切片的底层是数组,所以切片的数据连续存储在数组的数据结构中。如果底层的数组满了,切片还需要添加元素的话,底层数......
  • golang中的切片
    索引:https://waterflow.link/articles/1666277946416在go中切片的底层是数组,所以切片的数据连续存储在数组的数据结构中。如果底层的数组满了,切片还需要添加元素的话,底层......
  • Go 语言入门很简单:什么是 Golang
    Golang是一种相对较新的编程语言,很快就流行起来。StackOverflow对开发人员进行了民意调查,发现Golang是学习Go编程语言的第三大热门。为了更好地理解为什么Go如此......
  • 华科golang详细示例代码
    packagemainimport("net/url""net/http""bytes""fmt""io/ioutil")constProxyServer="ip.hahado.cn:39010"typeProxyAut......
  • golang os.Args (转)
    转自:301-golang之命令行参数os.Argsos.Args获取运行时的参数,是一个切片Slice,第一个值是当前可运行文件的绝对路径import("os""fmt")funcmain(){......
  • 爱上开源之golang入门至实战第四章函数(Func)(八)
    爱上开源之golang入门至实战第四章函数(Func)(八)4.4.8函数作为返回值在go语言里,func本质上是一个类型关键字。使用func来进行声明,本质上就是什么了一个func的对象。对象......
  • 我的Vue之旅 07 Axios + Golang + Sqlite3 实现简单评论机制
    第三期·使用Vue3.1+TailWind.CSS+Axios+Golang+Sqlite3实现简单评论机制效果图CommentArea.vue我们需要借助js的Data对象把毫秒时间戳转化成UTCStrin......