46 lines
880 B
Go
46 lines
880 B
Go
package models
|
|
|
|
import (
|
|
"database/sql"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type CustomTime struct {
|
|
sql.NullTime
|
|
}
|
|
|
|
func (ct *CustomTime) UnmarshalJSON(b []byte) error {
|
|
s := strings.Trim(string(b), `"`)
|
|
if s == "" || s == "null" {
|
|
ct.Valid = false
|
|
return nil
|
|
}
|
|
|
|
// DESTEKLENEN TÜM FORMATLAR
|
|
layouts := []string{
|
|
time.RFC3339, // 2025-11-21T00:10:27Z
|
|
"2006-01-02T15:04:05", // 2025-11-21T00:10:27
|
|
"2006-01-02 15:04:05", // 2025-11-21 00:10:27 ← FRONTEND FORMATIN!
|
|
}
|
|
|
|
for _, layout := range layouts {
|
|
if t, err := time.Parse(layout, s); err == nil {
|
|
ct.Time = t
|
|
ct.Valid = true
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// Hâlâ parse edemediyse → invalid kabul et
|
|
ct.Valid = false
|
|
return nil
|
|
}
|
|
|
|
func (ct CustomTime) MarshalJSON() ([]byte, error) {
|
|
if ct.Valid {
|
|
return []byte(`"` + ct.Time.Format("2006-01-02 15:04:05") + `"`), nil
|
|
}
|
|
return []byte(`null`), nil
|
|
}
|