You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
930 B
50 lines
930 B
package formatime
|
|
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// Date is a nullable time.Time. It supports SQL, JSON serialization AND datetime format(2006-01-02).
|
|
// It will marshal to null if null.
|
|
type Date struct {
|
|
protocol
|
|
}
|
|
|
|
const _DateFormat = "2006-01-02"
|
|
|
|
// new Date format of time, s is timestamp
|
|
func NewDate(s int64) Date {
|
|
return Date{protocol{
|
|
Time: time.Unix(s, 0),
|
|
Valid: true,
|
|
}}
|
|
}
|
|
|
|
// new Date format of time right now
|
|
func NewDateNow() Date {
|
|
return Date{protocol{
|
|
Time: time.Now(),
|
|
Valid: true,
|
|
}}
|
|
}
|
|
|
|
// new Date format of time from time.Time
|
|
func NewDateFrom(t time.Time) Date {
|
|
return Date{protocol{
|
|
Time: t,
|
|
Valid: true,
|
|
}}
|
|
}
|
|
|
|
// MarshalJSON implements json.Marshaler.
|
|
// It will encode null if this time is null.
|
|
func (t Date) MarshalJSON() ([]byte, error) {
|
|
if !t.Valid {
|
|
return []byte("null"), nil
|
|
}
|
|
var stamp = fmt.Sprintf("\"%s\"", t.Time.Format(_DateFormat))
|
|
return []byte(stamp), nil
|
|
}
|