package main
import (
"encoding/json"
"fmt"
"time"
)
type CustomTime struct {
time.Time
}
const (
layout1 = "2006-01-02"
layout2 = "2006-01-02 15:04:05"
)
func (ct *CustomTime) MarshalJSON() ([]byte, error) {
if ct.Time.IsZero() {
return json.Marshal(nil)
}
formattedTime := ct.Time.Format(layout2)
return json.Marshal(formattedTime)
}
func (ct *CustomTime) UnmarshalJSON(data []byte) error {
var s string
if err := json.Unmarshal(data, &s); err != nil {
return err
}
if len(s) == len(layout1) {
t, err := time.Parse(layout1, s)
if err != nil {
return err
}
ct.Time = t
} else if len(s) == len(layout2) {
t, err := time.Parse(layout2, s)
if err != nil {
return err
}
ct.Time = t
} else {
return fmt.Errorf("invalid time format")
}
return nil
}