吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1293|回复: 3
收起左侧

[其他原创] Golang 对 刚刚 几个小时前 几分钟前 几天前的时间处理

[复制链接]
hybpjx 发表于 2023-3-30 10:17

在做Go爬虫的时候 爬取新闻的时候遇到了这个时间问题
特此做个记录

  • 对刚刚 和 几分钟前的时间处理 默认返回当前时间
  • 对几小时前返回几个小时 如果几个小时大于当前小时,那就返回上一天时间。
  • 对于几天前 就是倒退几天前
/*
@Time : 2023/3/30 10:10
@AuThor : zic
@file : time_test
@Software: GoLand
@blog : https://www.cnblogs.com/zichliang
*/
package test

import (
    "fmt"
    "regexp"
    "strconv"
    "strings"
    "testing"
    "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
    }

}

func TestTime(T *testing.T) {
    formatTime := HoursBeforeDayBeforeFormat("1分钟前")
    fmt.Println(formatTime)
}

免费评分

参与人数 1吾爱币 +5 热心值 +1 收起 理由
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

侃遍天下无二人 发表于 2023-3-30 10:56
你可以再找找看,这种字符串一般都是在前端基于时间戳格式化而来的,找到时间戳处理起来就没这么麻烦了
 楼主| hybpjx 发表于 2023-3-30 10:58
侃遍天下无二人 发表于 2023-3-30 10:56
你可以再找找看,这种字符串一般都是在前端基于时间戳格式化而来的,找到时间戳处理起来就没这么麻烦了

很多大部分就是静态数据 这样的也很方便。如果是ajax请求  基本就是时间戳

点评

如果是静态的可以看看响应头里面的last modified字段,说不定可以直接拿来用  详情 回复 发表于 2023-3-30 11:00
侃遍天下无二人 发表于 2023-3-30 11:00
hybpjx 发表于 2023-3-30 10:58
很多大部分就是静态数据 这样的也很方便。如果是ajax请求  基本就是时间戳

如果是静态的可以看看响应头里面的last modified字段,说不定可以直接拿来用
 楼主| hybpjx 发表于 2023-3-30 11:07
侃遍天下无二人 发表于 2023-3-30 11:00
如果是静态的可以看看响应头里面的last modified字段,说不定可以直接拿来用

这个还真没注意 谢谢大佬,我这也是做个记录
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 00:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表