代码拉取完成,页面将自动刷新
同步操作将从 dromara/carbon 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package carbon
import (
"fmt"
"time"
)
// Parse parses a time string as a Carbon instance by default layouts.
//
// Note: it doesn't support parsing timestamp string.
func Parse(value string, timezone ...string) *Carbon {
if value == "" {
return &Carbon{isEmpty: true}
}
var (
tz string
tt StdTime
loc *Location
err error
)
if len(timezone) > 0 {
tz = timezone[0]
} else {
tz = DefaultTimezone
}
if loc, err = parseTimezone(tz); err != nil {
return &Carbon{Error: err}
}
switch value {
case "now":
return Now().SetLocation(loc)
case "yesterday":
return Yesterday().SetLocation(loc)
case "tomorrow":
return Tomorrow().SetLocation(loc)
}
c := NewCarbon().SetLocation(loc)
for i := range defaultLayouts {
if tt, err = time.ParseInLocation(defaultLayouts[i], value, loc); err == nil {
c.time = tt
c.currentLayout = defaultLayouts[i]
return c
}
}
c.Error = ErrFailedParse(value)
return c
}
// ParseByLayout parses a time string as a Carbon instance by a confirmed layout.
//
// Note: it will not support parsing timestamp string in the future,
// use "CreateFromTimestamp" or "CreateFromTimestampXXX" instead
func ParseByLayout(value, layout string, timezone ...string) *Carbon {
if value == "" {
return &Carbon{isEmpty: true}
}
if layout == "" {
return &Carbon{Error: ErrEmptyLayout()}
}
var (
ts int64
tz string
tt StdTime
loc *Location
err error
)
if len(timezone) > 0 {
tz = timezone[0]
} else {
tz = DefaultTimezone
}
if loc, err = parseTimezone(tz); err != nil {
return &Carbon{Error: err}
}
// timestamp layouts
switch layout {
case TimestampLayout:
if ts, err = parseTimestamp(value); err != nil {
return &Carbon{Error: err}
}
return CreateFromTimestamp(ts).SetLocation(loc)
case TimestampMilliLayout:
if ts, err = parseTimestamp(value); err != nil {
return &Carbon{Error: err}
}
return CreateFromTimestampMilli(ts).SetLocation(loc)
case TimestampMicroLayout:
if ts, err = parseTimestamp(value); err != nil {
return &Carbon{Error: err}
}
return CreateFromTimestampMicro(ts).SetLocation(loc)
case TimestampNanoLayout:
if ts, err = parseTimestamp(value); err != nil {
return &Carbon{Error: err}
}
return CreateFromTimestampNano(ts).SetLocation(loc)
}
// other layouts
if tt, err = time.ParseInLocation(layout, value, loc); err != nil {
return &Carbon{Error: fmt.Errorf("%w: %w", ErrMismatchedLayout(value, layout), err)}
}
c := NewCarbon()
c.loc = loc
c.time = tt
c.currentLayout = layout
return c
}
// ParseByFormat parses a time string as a Carbon instance by a confirmed format.
//
// Note: If the letter used conflicts with the format sign, please use the escape character "\" to escape the letter
func ParseByFormat(value, format string, timezone ...string) *Carbon {
if value == "" {
return &Carbon{isEmpty: true}
}
if format == "" {
return &Carbon{Error: ErrEmptyFormat()}
}
c := ParseByLayout(value, format2layout(format), timezone...)
if c.HasError() {
c.Error = fmt.Errorf("%w: %w", ErrMismatchedFormat(value, format), c.Error)
}
return c
}
// ParseByLayouts parses a time string as a Carbon instance by multiple fuzzy layouts.
//
// Note: it doesn't support parsing timestamp string.
func ParseByLayouts(value string, layouts []string, timezone ...string) *Carbon {
if value == "" {
return &Carbon{isEmpty: true}
}
if len(layouts) == 0 {
return &Carbon{Error: ErrEmptyLayout()}
}
var (
tz string
tt StdTime
loc *Location
err error
)
if len(timezone) > 0 {
tz = timezone[0]
} else {
tz = DefaultTimezone
}
if loc, err = parseTimezone(tz); err != nil {
return &Carbon{Error: err}
}
c := NewCarbon().SetLocation(loc)
for i := range layouts {
if tt, err = time.ParseInLocation(layouts[i], value, loc); err == nil {
c.time = tt
c.currentLayout = layouts[i]
return c
}
}
c.Error = ErrFailedParse(value)
return c
}
// ParseByFormats parses a time string as a Carbon instance by multiple fuzzy formats.
//
// Note: it doesn't support parsing timestamp string.
func ParseByFormats(value string, formats []string, timezone ...string) *Carbon {
if value == "" {
return &Carbon{isEmpty: true}
}
if len(formats) == 0 {
return &Carbon{Error: ErrEmptyFormat()}
}
var (
tz string
err error
)
if len(timezone) > 0 {
tz = timezone[0]
} else {
tz = DefaultTimezone
}
if _, err = parseTimezone(tz); err != nil {
return &Carbon{Error: err}
}
var layouts []string
for i := range formats {
layouts = append(layouts, format2layout(formats[i]))
}
return ParseByLayouts(value, layouts, tz)
}
// ParseWithLayouts parses a time string as a Carbon instance by multiple fuzzy layouts.
//
// Deprecated: it will be removed in the future, use "ParseByLayouts" instead.
func ParseWithLayouts(value string, layouts []string, timezone ...string) *Carbon {
return ParseByLayouts(value, layouts, timezone...)
}
// ParseWithFormats parses a time string as a Carbon instance by multiple fuzzy formats.
//
// Deprecated: it will be removed in the future, use "ParseByFormats" instead.
func ParseWithFormats(value string, formats []string, timezone ...string) *Carbon {
return ParseByFormats(value, formats, timezone...)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。