Build Status

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
GoDatetime.TImetime.LocationGoDateGoDate

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
Add()Sub()countunit
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
Difference()godategodateunit
godate

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
DifferenceForHumansGoDate
DifferenceFromNowForHumans

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

Contributions

The aim of this library is to provide a carbon level extension for date manipulation in golang. So PRs aiming to add more functions or spot and fix bugs are always welcome