自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PHP轉(zhuǎn)Go系列 | Carbon 時間處理工具的使用姿勢

開發(fā) 前端
時間處理無論是哪一門編程語言都是繞不過的一個話題,我們經(jīng)常做 PHP 開發(fā)的程序員,要想比較順利的學(xué)習(xí) Go 語言,最好的方式就是能找到同類型的第三方庫,說白了就是找到熟悉且好用的輪子,因為人的心里總是對自己熟悉的東西感到興奮,對不熟的東西感到恐懼。

大家好,我是碼農(nóng)先森。

在日常的開發(fā)過程中經(jīng)常會遇到對時間的處理,比如將時間戳進行格式化、獲取昨天或上周或上個月的時間、基于當(dāng)前時間進行加減等場景的使用。

在 PHP 語言中有一個針對時間處理的原生函數(shù) strtotime,大家都知道這個函數(shù)只能滿足基本的使用,如果遇到比較復(fù)雜的場景,則處理起來會比較繁瑣。PHP 作為世界上最好的語言,在這個問題面前自然會有大佬出來造輪子,由此就出現(xiàn)了 nesbot/carbon 擴展包。

其實在 Go 語言中也有同樣功能的第三方庫 carbon,我看過介紹文檔后,驚呼到簡直和 PHP 的擴展包長的一摸一樣,看樣子這位 Go 大佬也是從 PHP 轉(zhuǎn)過去的。這樣的好事直接降低了我們的學(xué)習(xí)成本,讓我們更加容易上手。

在 php_carbon 目錄下中使用 composer 命令安裝 carbon 包。

[manongsen@root ~]$ pwd
/home/manongsen/workspace/php_to_go/php_carbon
[manongsen@root php_carbon]$ composer require nesbot/carbon

在 go_carbon 目錄下中使用 go mod init 初始化 Go 項目,并且使用 go get 安裝 carbon 庫 。

[manongsen@root ~]$ pwd
/home/manongsen/workspace/php_to_go/go_carbon
[manongsen@root go_carbon]$ go mod init go_carbon
[manongsen@root go_carbon]$ go get github.com/golang-module/carbon/v2

這是初始化完成后的項目結(jié)構(gòu)。

[manongsen@root php_to_go]$ tree -L 2
.
├── README.md
├── go_carbon
│   ├── go.mod
│   ├── go.sum
│   └── main.go
└── php_carbon
    ├── composer.json
    ├── composer.lock
    ├── index.php
    └── vendor

我們先在 PHP 腳本代碼的首行通過函數(shù) date_default_timezone_set 設(shè)置時區(qū),再使用 require 加載依賴包。從下面示例代碼中可以看出 Carbon 工具的用法還是比較便捷,比如使用 subDays 和 addDays 函數(shù)可以加減天數(shù)、使用 diffForHumans 函數(shù)能以符合人閱讀習(xí)慣的方式輸出等。

此外,還有一些例子中沒有展示的用法,例如獲取當(dāng)前的季節(jié)、獲取本周開始結(jié)束時間、時間差的計算、判斷當(dāng)前的月份、獲取當(dāng)前是本周的第幾天等等,從官方提供的文檔來看 Carbon 工具用法還是相當(dāng)?shù)呢S富,幾乎可以滿足任意業(yè)務(wù)場景的使用。

<?php
date_default_timezone_set("Asia/Shanghai");

require 'vendor/autoload.php';

use Carbon\Carbon;

// 獲取當(dāng)前時間
$now = Carbon::now();
print_r("當(dāng)前時間 " . $now->toDateTimeString() . "\n");

// 獲取今天時間
$today = Carbon::today();
print_r("今天時間 " . $today->toDateString() . "\n");

// 獲取昨天時間
$yesterday = Carbon::yesterday();
print_r("昨天時間 " . $yesterday->toDateString() . "\n");

// 獲取明天時間
$tomorrow = Carbon::tomorrow();
print_r("明天時間 " . $tomorrow->toDateString() . "\n");

// 3 天前時間
$threeDaysAgo = Carbon::today()->subDays(3);
print_r("3天前時間 " . $threeDaysAgo->toDateString(). "\n");

// 7 天前時間
$sevenDaysAgo = Carbon::today()->subDays(7);
print_r("7天前時間 " . $sevenDaysAgo->toDateString(). "\n");

// 符合人閱讀習(xí)慣的時間輸出
Carbon::setLocale('zh');

// 1個小時前
$anHourAgo = Carbon::now()->subHours(1)->diffForHumans();
print_r($anHourAgo. "\n");

// 1天前
$oneDayAgo = Carbon::now()->subDays(1)->diffForHumans();
print_r($oneDayAgo. "\n");           

// 1個月前
$oneMonthAgo = Carbon::now()->subMonth()->diffForHumans();
print_r($oneMonthAgo. "\n");

執(zhí)行 php index.php 命令便可輸出上述示例代碼的結(jié)果。

[manongsen@root php_carbon]$ php index.php 
當(dāng)前時間 2024-06-27 22:23:11
今天時間 2024-06-27
昨天時間 2024-06-26
明天時間 2024-06-28
3天前時間 2024-06-24
7天前時間 2024-06-20
1小時前
1天前
1個月前

同樣在 Go 中的使用方式與 PHP 類似,但包的導(dǎo)入是用 import 關(guān)鍵詞。如果原來對 PHP 的 Carbon 工具使用很熟練的話,那么轉(zhuǎn)到 Go 來也會很容易理解,說是零門檻的學(xué)習(xí)成本也不為過。

package main

import (
 "fmt"

 "gitee.com/golang-module/carbon/v2"
)

func main() {
 // 當(dāng)前時間
 now := carbon.Now().String()
 fmt.Printf("當(dāng)前時間 %v\n", now)

 // 獲取今天時間
 today := carbon.Now().ToDateString()
 fmt.Printf("今天時間 %v\n", today)

 // 獲取昨天時間
 yesterday := carbon.Yesterday().ToDateString()
 fmt.Printf("昨天時間 %v\n", yesterday)

 // 獲取明天時間
 tomorrow := carbon.Tomorrow().ToDateString()
 fmt.Printf("明天時間 %v\n", tomorrow)

 // 3天前時間
 threeDaysAgo := carbon.Now().SubDays(3).ToDateString()
 fmt.Printf("3天前時間 %v\n", threeDaysAgo)

 // 7天前時間
 sevenDaysAgo := carbon.Now().SubDays(7).ToDateString()
 fmt.Printf("7天前時間 %v\n", sevenDaysAgo)

 // 對人類友好的可讀格式時間格式
 lang := carbon.NewLanguage()
 lang.SetLocale("zh-CN")
 c := carbon.SetLanguage(lang)
 if c.Error != nil {
  // 錯誤處理
  fmt.Printf("err: %v\n", c.Error)
  return
 }

 // 1個小時前
 anHourAgo := c.Now().SubHours(1).DiffForHumans()
 fmt.Printf("%v\n", anHourAgo)

 // 1天前
 oneDayAgo := c.Now().SubDays(1).DiffForHumans()
 fmt.Printf("%v\n", oneDayAgo)

 // 1個月前
 oneMonthAgo := c.Now().SubMonths(1).DiffForHumans()
 fmt.Printf("%v\n", oneMonthAgo)
}

執(zhí)行 go run main.go 命令便可輸出上述示例代碼的結(jié)果。從輸出的結(jié)果來看,與 PHP 輸出是一樣的并無差異。

[manongsen@root go_carbon]$ go run main.go 
當(dāng)前時間 2024-06-27 21:25:29
今天時間 2024-06-27
昨天時間 2024-06-26
明天時間 2024-06-28
3天前時間 2024-06-24
7天前時間 2024-06-20
1 小時前
1 天前
1 個月前

時間處理無論是哪一門編程語言都是繞不過的一個話題,我們經(jīng)常做 PHP 開發(fā)的程序員,要想比較順利的學(xué)習(xí) Go 語言,最好的方式就是能找到同類型的第三方庫,說白了就是找到熟悉且好用的輪子,因為人的心里總是對自己熟悉的東西感到興奮,對不熟的東西感到恐懼。

因此熟悉的東西可以減低我們的學(xué)習(xí)難度,提振我們學(xué)習(xí)的自信心。從上面的兩個代碼示例來看,Go 語言的學(xué)習(xí)難度也不過如此,同時也打破了很多人說 Go 很難學(xué)的說法。

最后為了方便大家學(xué)習(xí) Carbon 時間處理工具,我把 PHP 中的 nesbot/carbon 和 Go 中的 golang-module/carbon/v2 官方文檔附上。

  • https://carbon.nesbot.com/
  • https://github.com/golang-module/carbon/blob/master/README.cn.md
責(zé)任編輯:武曉燕 來源: 碼農(nóng)先森
相關(guān)推薦

2009-11-26 14:14:06

PHP中文處理工具函數(shù)

2023-02-24 07:48:20

PHPGo服務(wù)

2022-12-28 12:11:57

PHPGo框架

2022-07-19 08:01:55

函數(shù)Go格式化

2022-12-12 09:42:04

PHPGo框架

2021-07-12 11:35:13

Go協(xié)程Goroutine

2010-03-09 19:19:40

Python圖像處理

2023-09-04 13:26:27

PHP開發(fā)工具

2024-02-06 14:05:00

Go中間件框架

2015-08-14 09:21:09

gdb工具調(diào)試 Go

2024-02-26 00:02:00

開發(fā)Go

2009-12-10 14:27:21

PHP處理Word轉(zhuǎn)P

2024-10-21 09:06:15

2024-01-19 07:39:25

Go日期開發(fā)

2022-08-31 09:52:19

Python圖像處理

2021-12-02 09:36:23

大數(shù)據(jù)工具數(shù)據(jù)分析

2021-12-01 23:16:44

工具數(shù)據(jù)處理

2020-07-22 08:13:22

大數(shù)據(jù)

2014-07-16 16:17:00

2015-07-13 11:32:09

PHP程序員正確姿勢
點贊
收藏

51CTO技術(shù)棧公眾號