Giter Site home page Giter Site logo

Comments (1)

jpmeijers avatar jpmeijers commented on June 25, 2024

I ended up writing a custom type based on gorm's Date.

package customtypes

import (
	"cloud.google.com/go/civil"
	"database/sql"
	"database/sql/driver"
	"time"
)

type Date civil.Date

func (date *Date) Scan(value interface{}) (err error) {
	nullTime := &sql.NullTime{}
	err = nullTime.Scan(value)
	*date = Date(civil.DateOf(nullTime.Time))
	return
}

func (date Date) Value() (driver.Value, error) {
	return time.Date(date.Year, date.Month, date.Day, 0, 0, 0, 0, time.UTC), nil
}

// GormDataType gorm common data type
func (date Date) GormDataType() string {
	return "date"
}

func (date Date) GobEncode() ([]byte, error) {
	return civil.Date(date).In(time.UTC).GobEncode()
}

func (date *Date) GobDecode(b []byte) error {
	var timeVal time.Time
	err := timeVal.GobDecode(b)
	if err != nil {
		return err
	}
	dateVal := Date(civil.DateOf(timeVal))
	*date = dateVal
	return nil
}

func (date Date) MarshalJSON() ([]byte, error) {
	marshalled := make([]byte, 0)
	text, err := civil.Date(date).MarshalText()
	marshalled = append(marshalled, byte('"'))
	marshalled = append(marshalled, text...)
	marshalled = append(marshalled, byte('"'))
	return marshalled, err
}

func (date *Date) UnmarshalJSON(b []byte) error {
	c := civil.Date{}
	err := c.UnmarshalText(b[1 : len(b)-1])
	*date = Date(c)
	return err
}

from datatypes.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.