/ Time

Golang date manipulation library influenced by carbon

Golang date manipulation library influenced by carbon

GODATE

Godate is a date toolkit for golang for easy date manipulation highly inspired by php's carbon Carbon.

Installation

go get github.com/kofoworola/godate

Usage

The GoDate struct is simply a wrapper around a time.TIme struct and a time.Location object
most of the methods available to the GoDate return a corresponding GoDate (Except the Difference and boolean based methods) that
allows you to chain methods together

Initialization

godate.Create(time.Now())
godate.Now(time.UTC)
godate.Tomorrow(time.UTC)

outputs

Sat Apr 27 18:53:11 +0100 WAT 2019
Sat Apr 27 17:53:11 +0000 UTC 2019
Sun Apr 28 17:53:11 +0000 UTC 2019

Methods

now := godate.Now(time.UTC)
now.IsAfter(now.Add(1,godate.DAY)) //false
now.IsAfter(now.Sub(1,godate.DAY)) //true
now.IsBefore(now.Add(1,godate.DAY)) //true
now.IsBefore(now.Sub(1,godate.DAY)) //false

The Add() and Sub() methods takes two parameters, the count and the
unit to add which is any of the constants

SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
YEAR

Difference

now := godate.Now(time.UTC)
now.Difference(now.Sub(1,godate.DAY),godate.DAY) //1 
now.Difference(now.Add(7,godate.DAY),godate.WEEK) //-1

The Difference() method returns the difference of the passed godate
relative to the godate that the method is being called on. It returns the difference
in the specified unit (the second parameter).

+ve means the passed godate occurs after the method owner while -ve is the opposite

Difference for humans

fmt.Println(now.DifferenceForHumans(now.Add(1,godate.WEEK))) //1 week after
fmt.Println(now.Add(8,godate.DAY).DifferenceFromNowForHumans()) //1 week from 
fmt.Println(now.Sub(21,godate.DAY).DifferenceFromNowForHumans()) //3 weeks ago

The DifferenceForHumans methods works similar to the corresponding
carbon method
It compares of the passed GoDate relative to the one that the method is being called on

The DifferenceFromNowForHumans methods gets the difference of the date relative to the current
time in the same timezone

Helper methods

Below are the available self explanatory helper methods

now.SetFirstDay(time.Wednesday)
fmt.Println(now) //Tue Apr 30 15:31:58 +0000 UTC 2019
fmt.Println(now.StartOfHour()) //Tue Apr 30 15:00:00 +0000 UTC 2019
fmt.Println(now.StartOfDay()) //Tue Apr 30 00:00:00 +0000 UTC 2019
fmt.Println(now.StartOfWeek()) //Wed May 1 00:00:00 +0000 UTC 2019
fmt.Println(now.StartOfQuarter()) //Mon Apr 1 00:00:00 +0000 UTC 2019
fmt.Println(now.StartOfMonth()) //Mon Apr 1 00:00:00 +0000 UTC 2019
fmt.Println(now.StartOfYear()) //Tue Jan 1 00:00:00 +0000 UTC 2019

fmt.Println(now.EndOfHour()) //Tue Apr 30 15:59:59 +0000 UTC 2019
fmt.Println(now.EndOfDay()) //Tue Apr 30 23:59:59 +0000 UTC 2019
fmt.Println(now.EndOfWeek()) //Tue May 7 23:59:59 +0000 UTC 2019
fmt.Println(now.EndOfQuarter()) //Sun Jun 30 23:59:59 +0000 UTC 2019
fmt.Println(now.EndOfMonth()) //Tue Apr 30 23:59:59 +0000 UTC 2019
fmt.Println(now.EndOfYear()) //Thu Jan 31 23:59:59 +0000 UTC 2019
fmt.Println(now.IsWeekend()) //true

Setters

You can use the available setter methods to set values of the goDate variable e.g

date,_ := Parse("2006-01-02","2019-05-01")
date.Year(2008).Month(10).Day(30).Hour(11).Minute(	3).Second(12)
fmt.Println(date.Format("2006-01-02 15:04:05")) //2008-10-30 11:03:12

String formatting options

The string formatting methods are similar to carbon's string formatting

timeVal,_ := time.Parse("2006-01-02 3:04PM","2019-04-28 1:04PM")
now = &godate.GoDate{Time: timeVal, TimeZone: time.UTC}
fmt.Println(now.ToDateString()) //2019-04-28
fmt.Println(now.ToTimeString()) //13:04:00
fmt.Println(now.ToFormattedDateString()) //Apr 28, 2019
fmt.Println(now.ToDateTimeString()) //2019-04-28 13:04:00
fmt.Println(now.ToDayTimeString()) //Sun, Apr 28, 2019 01:04 PM

GitHub