@@ -143,43 +143,6 @@ carbon.Time2Carbon(time.Now())
143143carbon.Now ().Carbon2Time () 或 carbon.Now ().Time
144144```
145145
146- ##### 时间设置
147- ``` go
148- // 设置时区
149- carbon.SetTimezone (carbon.PRC ).Now ().ToDateTimeString () // 2020-08-05 13:14:15
150- carbon.SetTimezone (carbon.Tokyo ).Now ().ToDateTimeString () // 2020-08-05 14:14:15
151- carbon.SetTimezone (carbon.Tokyo ).SetTimezone (carbon.PRC ).Now ().ToDateTimeString () // 2020-08-05 13:14:15
152-
153- // 设置语言
154- carbon.Parse (" 2020-07-05 13:14:15" ).SetLocale (" en" ).DiffForHumans ()) // 1 month before
155- carbon.Parse (" 2020-07-05 13:14:15" ).SetLocale (" zh-CN" ).DiffForHumans ()) // 1 月前
156-
157- // 设置年
158- carbon.Parse (" 2019-08-05" ).SetYear (2020 ).ToDateString () // 2020-08-05
159- carbon.Parse (" 2020-02-29" ).SetYear (2019 ).ToDateString () // 2019-03-01
160-
161- // 设置月
162- carbon.Parse (" 2020-01-31" ).SetMonth (2 ).ToDateString () // 2020-03-02
163- carbon.Parse (" 2020-08-05" ).SetMonth (2 ).ToDateString () // 2020-02-05
164-
165- // 设置日
166- carbon.Parse (" 2019-08-05" ).SetDay (31 ).ToDateString () // 2020-08-31
167- carbon.Parse (" 2020-02-01" ).SetDay (31 ).ToDateString () // 2020-03-02
168-
169- // 设置时
170- carbon.Parse (" 2020-08-05 13:14:15" ).SetHour (10 ).ToDateTimeString () // 2020-08-05 10:14:15
171- carbon.Parse (" 2020-08-05 13:14:15" ).SetHour (24 ).ToDateTimeString () // 2020-08-06 00:14:15
172-
173- // 设置分
174- carbon.Parse (" 2020-08-05 13:14:15" ).SetMinute (10 ).ToDateTimeString () // 2020-08-05 13:10:15
175- carbon.Parse (" 2020-08-05 13:14:15" ).SetMinute (60 ).ToDateTimeString () // 2020-08-05 14:00:15
176-
177- // 设置秒
178- carbon.Parse (" 2020-08-05 13:14:15" ).SetSecond (10 ).ToDateTimeString () // 2020-08-05 13:14:10
179- carbon.Parse (" 2020-08-05 13:14:15" ).SetSecond (60 ).ToDateTimeString () // 2020-08-05 13:15:00
180- ```
181- > 更多时区常量请查看[ constant.go] ( ./constant.go ) 文件
182-
183146##### 开始时间、结束时间
184147``` go
185148// 本年开始时间
@@ -211,6 +174,11 @@ carbon.Parse("2020-08-05 13:14:15").EndOfHour().ToDateTimeString() // 2020-08-05
211174carbon.Parse (" 2020-08-05 13:14:15" ).StartOfMinute ().ToDateTimeString () // 2020-08-05 13:14:00
212175// 本分钟结束时间
213176carbon.Parse (" 2020-08-05 13:14:15" ).EndOfMinute ().ToDateTimeString () // 2020-08-05 13:14:59
177+
178+ // 本秒开始时间
179+ carbon.Parse (" 2020-08-05 13:14:15" ).StartOfSecond ().Format (" Y-m-d H:i:s.u" ) // 2020-08-05 13:14:15.0
180+ // 本秒结束时间
181+ carbon.Parse (" 2020-08-05 13:14:15" ).EndOfSecond ().Format (" Y-m-d H:i:s.u" ) // 2020-08-05 13:14:15.999
214182```
215183
216184##### 时间旅行
@@ -389,73 +357,17 @@ carbon.Parse("2020-08-05 13:14:15").DiffInSeconds(carbon.Parse("2020-08-05 13:14
389357// 相差多少秒(绝对值)
390358carbon.Parse (" 2020-08-05 13:14:15" ).DiffInSecondsWithAbs (carbon.Parse (" 2020-08-05 13:14:14" )) // 1
391359
392- // 对人类友好的可读格式时间差(默认英文)
393- carbon.Now ().DiffForHumans ()) // just now
394- carbon.Now ().SubYears (1 ).DiffForHumans () // 1 years ago
395- carbon.Now ().SubYears (2 ).DiffForHumans () // 2 year ago
396- carbon.Now ().AddYears (1 ).DiffForHumans () // in 1 year
397- carbon.Now ().AddYears (2 ).DiffForHumans () // in 2 years
398- // 对人类友好的可读格式时间差(指定语言)
399- carbon.Now ().SetLocale (" zh-CN" ).DiffForHumans () // 刚刚
400- carbon.Now ().SubMonths (1 ).SetLocale (" zh-CN" ).DiffForHumans () // 1 月前
401- carbon.Now ().AddMonths (2 ).SetLocale (" zh-CN" ).DiffForHumans () // 2 月后
402-
403- ```
404-
405- ##### 时间比较
406- ``` go
407- // 是否大于
408- carbon.Parse (" 2020-08-05 13:14:15" ).Gt (carbon.Parse (" 2020-08-04 13:14:15" )) // true
409- carbon.Parse (" 2020-08-05 13:14:15" ).Gt (carbon.Parse (" 2020-08-05 13:14:15" )) // false
410- carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" >" , carbon.Parse (" 2020-08-04 13:14:15" )) // true
411- carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" >" , carbon.Parse (" 2020-08-05 13:14:15" )) // false
412-
413- // 是否小于
414- carbon.Parse (" 2020-08-05 13:14:15" ).Lt (carbon.Parse (" 2020-08-06 13:14:15" )) // true
415- carbon.Parse (" 2020-08-05 13:14:15" ).Lt (carbon.Parse (" 2020-08-05 13:14:15" )) // false
416- carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" <" , carbon.Parse (" 2020-08-06 13:14:15" )) // true
417- carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" <" , carbon.Parse (" 2020-08-05 13:14:15" )) // false
418-
419- // 是否等于
420- carbon.Parse (" 2020-08-05 13:14:15" ).Eq (carbon.Parse (" 2020-08-05 13:14:15" )) // true
421- carbon.Parse (" 2020-08-05 13:14:15" ).Eq (carbon.Parse (" 2020-08-05 13:14:00" )) // false
422- carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" =" , carbon.Parse (" 2020-08-05 13:14:15" )) // true
423- carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" =" , carbon.Parse (" 2020-08-05 13:14:00" )) // false
424-
425- // 是否不等于
426- carbon.Parse (" 2020-08-05 13:14:15" ).Ne (carbon.Parse (" 2020-08-06 13:14:15" )) // true
427- carbon.Parse (" 2020-08-05 13:14:15" ).Ne (carbon.Parse (" 2020-08-05 13:14:15" )) // false
428- carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" !=" , carbon.Parse (" 2020-08-06 13:14:15" )) // true
429- carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" <>" , carbon.Parse (" 2020-08-05 13:14:15" )) // false
430-
431- // 是否大于等于
432- carbon.Parse (" 2020-08-05 13:14:15" ).Gte (carbon.Parse (" 2020-08-04 13:14:15" )) // true
433- carbon.Parse (" 2020-08-05 13:14:15" ).Gte (carbon.Parse (" 2020-08-05 13:14:15" )) // true
434- carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" >=" , carbon.Parse (" 2020-08-04 13:14:15" )) // true
435- carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" >=" , carbon.Parse (" 2020-08-05 13:14:15" )) // true
436-
437- // 是否小于等于
438- carbon.Parse (" 2020-08-05 13:14:15" ).Lte (carbon.Parse (" 2020-08-06 13:14:15" )) // true
439- carbon.Parse (" 2020-08-05 13:14:15" ).Lte (carbon.Parse (" 2020-08-05 13:14:15" )) // true
440- carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" <=" , carbon.Parse (" 2020-08-06 13:14:15" )) // true
441- carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" <=" , carbon.Parse (" 2020-08-05 13:14:15" )) // true
442-
443- // 是否在两个时间之间(不包括这两个时间)
444- carbon.Parse (" 2020-08-05 13:14:15" ).Between (carbon.Parse (" 2020-08-05 13:14:15" ), carbon.Parse (" 2020-08-06 13:14:15" )) // false
445- carbon.Parse (" 2020-08-05 13:14:15" ).Between (carbon.Parse (" 2020-08-04 13:14:15" ), carbon.Parse (" 2020-08-06 13:14:15" )) // true
446-
447- // 是否在两个时间之间(包括开始时间)
448- carbon.Parse (" 2020-08-05 13:14:15" ).BetweenIncludedStartTime (carbon.Parse (" 2020-08-05 13:14:15" ), carbon.Parse (" 2020-08-06 13:14:15" )) // true
449- carbon.Parse (" 2020-08-05 13:14:15" ).BetweenIncludedStartTime (carbon.Parse (" 2020-08-04 13:14:15" ), carbon.Parse (" 2020-08-06 13:14:15" )) // true
450-
451- // 是否在两个时间之间(包括结束时间)
452- carbon.Parse (" 2020-08-05 13:14:15" ).BetweenIncludedEndTime (carbon.Parse (" 2020-08-04 13:14:15" ), carbon.Parse (" 2020-08-05 13:14:15" )) // true
453- carbon.Parse (" 2020-08-05 13:14:15" ).BetweenIncludedEndTime (carbon.Parse (" 2020-08-04 13:14:15" ), carbon.Parse (" 2020-08-06 13:14:15" )) // true
454-
455- // 是否在两个时间之间(包括这两个时间)
456- carbon.Parse (" 2020-08-05 13:14:15" ).BetweenIncludedBoth (carbon.Parse (" 2020-08-05 13:14:15" ), carbon.Parse (" 2020-08-06 13:14:15" )) // true
457- carbon.Parse (" 2020-08-05 13:14:15" ).BetweenIncludedBoth (carbon.Parse (" 2020-08-04 13:14:15" ), carbon.Parse (" 2020-08-05 13:14:15" )) // true
458-
360+ // 对人类友好的可读格式时间差
361+ carbon.Parse (" 2020-08-05 13:14:15" ).DiffForHumans ()) // just now
362+ carbon.Parse (" 2019-08-05 13:14:15" ).DiffForHumans () // 1 year ago
363+ carbon.Parse (" 2018-08-05 13:14:15" ).DiffForHumans () // 2 years ago
364+ carbon.Parse (" 2021-08-05 13:14:15" ).DiffForHumans () // 1 year from now
365+ carbon.Parse (" 2022-08-05 13:14:15" ).DiffForHumans () // 2 years from now
366+
367+ carbon.Parse (" 2020-08-05 13:14:15" ).DiffForHumans (carbon.Now ()) // 1 year before
368+ carbon.Parse (" 2019-08-05 13:14:15" ).DiffForHumans (carbon.Now ()) // 2 years before
369+ carbon.Parse (" 2018-08-05 13:14:15" ).DiffForHumans (carbon.Now ()) // 1 year after
370+ carbon.Parse (" 2022-08-05 13:14:15" ).DiffForHumans (carbon.Now ()) // 2 years after
459371```
460372
461373##### 时间判断
@@ -538,6 +450,59 @@ carbon.Parse("2020-08-05").IsToday() // true
538450carbon.Parse (" 2020-08-06 13:14:15" ).IsTomorrow () // true
539451carbon.Parse (" 2020-08-06 00:00:00" ).IsTomorrow () // true
540452carbon.Parse (" 2020-08-06" ).IsTomorrow () // true
453+
454+ // 是否大于
455+ carbon.Parse (" 2020-08-05 13:14:15" ).Gt (carbon.Parse (" 2020-08-04 13:14:15" )) // true
456+ carbon.Parse (" 2020-08-05 13:14:15" ).Gt (carbon.Parse (" 2020-08-05 13:14:15" )) // false
457+ carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" >" , carbon.Parse (" 2020-08-04 13:14:15" )) // true
458+ carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" >" , carbon.Parse (" 2020-08-05 13:14:15" )) // false
459+
460+ // 是否小于
461+ carbon.Parse (" 2020-08-05 13:14:15" ).Lt (carbon.Parse (" 2020-08-06 13:14:15" )) // true
462+ carbon.Parse (" 2020-08-05 13:14:15" ).Lt (carbon.Parse (" 2020-08-05 13:14:15" )) // false
463+ carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" <" , carbon.Parse (" 2020-08-06 13:14:15" )) // true
464+ carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" <" , carbon.Parse (" 2020-08-05 13:14:15" )) // false
465+
466+ // 是否等于
467+ carbon.Parse (" 2020-08-05 13:14:15" ).Eq (carbon.Parse (" 2020-08-05 13:14:15" )) // true
468+ carbon.Parse (" 2020-08-05 13:14:15" ).Eq (carbon.Parse (" 2020-08-05 13:14:00" )) // false
469+ carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" =" , carbon.Parse (" 2020-08-05 13:14:15" )) // true
470+ carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" =" , carbon.Parse (" 2020-08-05 13:14:00" )) // false
471+
472+ // 是否不等于
473+ carbon.Parse (" 2020-08-05 13:14:15" ).Ne (carbon.Parse (" 2020-08-06 13:14:15" )) // true
474+ carbon.Parse (" 2020-08-05 13:14:15" ).Ne (carbon.Parse (" 2020-08-05 13:14:15" )) // false
475+ carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" !=" , carbon.Parse (" 2020-08-06 13:14:15" )) // true
476+ carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" <>" , carbon.Parse (" 2020-08-05 13:14:15" )) // false
477+
478+ // 是否大于等于
479+ carbon.Parse (" 2020-08-05 13:14:15" ).Gte (carbon.Parse (" 2020-08-04 13:14:15" )) // true
480+ carbon.Parse (" 2020-08-05 13:14:15" ).Gte (carbon.Parse (" 2020-08-05 13:14:15" )) // true
481+ carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" >=" , carbon.Parse (" 2020-08-04 13:14:15" )) // true
482+ carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" >=" , carbon.Parse (" 2020-08-05 13:14:15" )) // true
483+
484+ // 是否小于等于
485+ carbon.Parse (" 2020-08-05 13:14:15" ).Lte (carbon.Parse (" 2020-08-06 13:14:15" )) // true
486+ carbon.Parse (" 2020-08-05 13:14:15" ).Lte (carbon.Parse (" 2020-08-05 13:14:15" )) // true
487+ carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" <=" , carbon.Parse (" 2020-08-06 13:14:15" )) // true
488+ carbon.Parse (" 2020-08-05 13:14:15" ).Compare (" <=" , carbon.Parse (" 2020-08-05 13:14:15" )) // true
489+
490+ // 是否在两个时间之间(不包括这两个时间)
491+ carbon.Parse (" 2020-08-05 13:14:15" ).Between (carbon.Parse (" 2020-08-05 13:14:15" ), carbon.Parse (" 2020-08-06 13:14:15" )) // false
492+ carbon.Parse (" 2020-08-05 13:14:15" ).Between (carbon.Parse (" 2020-08-04 13:14:15" ), carbon.Parse (" 2020-08-06 13:14:15" )) // true
493+
494+ // 是否在两个时间之间(包括开始时间)
495+ carbon.Parse (" 2020-08-05 13:14:15" ).BetweenIncludedStartTime (carbon.Parse (" 2020-08-05 13:14:15" ), carbon.Parse (" 2020-08-06 13:14:15" )) // true
496+ carbon.Parse (" 2020-08-05 13:14:15" ).BetweenIncludedStartTime (carbon.Parse (" 2020-08-04 13:14:15" ), carbon.Parse (" 2020-08-06 13:14:15" )) // true
497+
498+ // 是否在两个时间之间(包括结束时间)
499+ carbon.Parse (" 2020-08-05 13:14:15" ).BetweenIncludedEndTime (carbon.Parse (" 2020-08-04 13:14:15" ), carbon.Parse (" 2020-08-05 13:14:15" )) // true
500+ carbon.Parse (" 2020-08-05 13:14:15" ).BetweenIncludedEndTime (carbon.Parse (" 2020-08-04 13:14:15" ), carbon.Parse (" 2020-08-06 13:14:15" )) // true
501+
502+ // 是否在两个时间之间(包括这两个时间)
503+ carbon.Parse (" 2020-08-05 13:14:15" ).BetweenIncludedBoth (carbon.Parse (" 2020-08-05 13:14:15" ), carbon.Parse (" 2020-08-06 13:14:15" )) // true
504+ carbon.Parse (" 2020-08-05 13:14:15" ).BetweenIncludedBoth (carbon.Parse (" 2020-08-04 13:14:15" ), carbon.Parse (" 2020-08-05 13:14:15" )) // true
505+
541506```
542507
543508##### 时间输出
@@ -606,6 +571,42 @@ carbon.Parse("2020-08-05 13:14:15").Format("l jS \\o\\f F Y h:i:s A") // Wednesd
606571```
607572> 更多格式化输出符号请查看附录 <a href =" #格式化符号表 " >格式化符号表</a >
608573
574+ ##### 时间设置
575+ ``` go
576+ // 设置时区
577+ carbon.SetTimezone (carbon.PRC ).Now ().ToDateTimeString () // 2020-08-05 13:14:15
578+ carbon.SetTimezone (carbon.Tokyo ).Now ().ToDateTimeString () // 2020-08-05 14:14:15
579+ carbon.SetTimezone (carbon.Tokyo ).SetTimezone (carbon.PRC ).Now ().ToDateTimeString () // 2020-08-05 13:14:15
580+
581+ // 设置语言
582+ carbon.Parse (" 2020-07-05 13:14:15" ).SetLocale (" en" ).DiffForHumans ()) // 1 month ago
583+ carbon.Parse (" 2020-07-05 13:14:15" ).SetLocale (" zh-CN" ).DiffForHumans ()) // 1 月前
584+
585+ // 设置年
586+ carbon.Parse (" 2019-08-05" ).SetYear (2020 ).ToDateString () // 2020-08-05
587+ carbon.Parse (" 2020-02-29" ).SetYear (2019 ).ToDateString () // 2019-03-01
588+
589+ // 设置月
590+ carbon.Parse (" 2020-01-31" ).SetMonth (2 ).ToDateString () // 2020-03-02
591+ carbon.Parse (" 2020-08-05" ).SetMonth (2 ).ToDateString () // 2020-02-05
592+
593+ // 设置日
594+ carbon.Parse (" 2019-08-05" ).SetDay (31 ).ToDateString () // 2020-08-31
595+ carbon.Parse (" 2020-02-01" ).SetDay (31 ).ToDateString () // 2020-03-02
596+
597+ // 设置时
598+ carbon.Parse (" 2020-08-05 13:14:15" ).SetHour (10 ).ToDateTimeString () // 2020-08-05 10:14:15
599+ carbon.Parse (" 2020-08-05 13:14:15" ).SetHour (24 ).ToDateTimeString () // 2020-08-06 00:14:15
600+
601+ // 设置分
602+ carbon.Parse (" 2020-08-05 13:14:15" ).SetMinute (10 ).ToDateTimeString () // 2020-08-05 13:10:15
603+ carbon.Parse (" 2020-08-05 13:14:15" ).SetMinute (60 ).ToDateTimeString () // 2020-08-05 14:00:15
604+
605+ // 设置秒
606+ carbon.Parse (" 2020-08-05 13:14:15" ).SetSecond (10 ).ToDateTimeString () // 2020-08-05 13:14:10
607+ carbon.Parse (" 2020-08-05 13:14:15" ).SetSecond (60 ).ToDateTimeString () // 2020-08-05 13:15:00
608+ ```
609+
609610##### 时间获取
610611``` go
611612// 获取本年总天数
@@ -665,6 +666,76 @@ carbon.Parse("2002-12-31 13:14:15").Age() // 18
665666```
666667> 关于第几周的计算如有疑惑请查看 [ ISO8601标准] ( https://baike.baidu.com/item/ISO%208601/3910715 )
667668
669+ ##### 多语言支持
670+ ###### 设置区域
671+ ``` go
672+ // 方式一(推荐)
673+ c := carbon.Now ().AddHours (1 ).SetLocale (" zh-CN" )
674+ if c.Error != nil {
675+ // 错误处理
676+ fmt.Println (c.Error )
677+ }
678+ c.DiffForHumans () // 1 小时后
679+
680+ // 方式二
681+ lang := NewLanguage ()
682+ if err := lang.SetLocale (" zh-CN" );err != nil {
683+ // 错误处理
684+ fmt.Println (err)
685+ }
686+ carbon.Now ().AddHours (1 ).SetLanguage (lang).DiffForHumans () // 1 小时后
687+ ```
688+ ###### 设置目录
689+ ``` go
690+ lang := NewLanguage ()
691+ if err := lang.SetDir (" lang" );err != nil {
692+ // 错误处理
693+ fmt.Println (err)
694+ }
695+ carbon.Now ().AddHours (1 ).SetLanguage (lang).DiffForHumans () // 1 小时后
696+ ```
697+
698+ ###### 部分自定义翻译(其余仍然按照指定的locale翻译)
699+ ``` go
700+ lang := NewLanguage ()
701+
702+ if err := lang.SetLocale (" en" );err != nil {
703+ // 错误处理
704+ fmt.Println (err)
705+ }
706+
707+ resources := map [string ]string {
708+ " hour" :" %d h" ,
709+ }
710+ lang.SetResources (resources)
711+
712+ carbon.Now ().AddYears (1 ).SetLanguage (lang).DiffForHumans () // 1 year from now
713+ carbon.Now ().AddHours (1 ).SetLanguage (lang).DiffForHumans () // 1h from now
714+ ```
715+
716+ ###### 完全自定义翻译
717+ ``` go
718+ lang := NewLanguage ()
719+ resources := map [string ]string {
720+ " year" :" 1 yr|%d yrs" ,
721+ " month" :" 1 mo|%d mos" ,
722+ " week" :" %d w" ,
723+ " day" :" %d d" ,
724+ " hour" :" %d h" ,
725+ " minute" :" %d m" ,
726+ " second" :" %d s" ,
727+ " now" : " just now" ,
728+ " ago" :" %s ago" ,
729+ " from_now" :" in %s " ,
730+ " before" :" %s before" ,
731+ " after" :" %s after" ,
732+ }
733+ lang.SetResources (resources)
734+
735+ carbon.Now ().AddYears (1 ).SetLanguage (lang).DiffForHumans () // in 1 yr
736+ carbon.Now ().AddHours (1 ).SetLanguage (lang).DiffForHumans () // in 1h
737+ ```
738+
668739##### 农历支持
669740``` go
670741// 获取生肖年
@@ -833,7 +904,7 @@ fmt.Println(c.ToDateTimeString())
833904// 输出
834905invalid timezone "XXXX", please see the $GOROOT/lib/time/zoneinfo.zip file for all valid timezone
835906```
836- > 建议使用SetTimezone()、Parse()、ParseByFormat()、AddDuration()、SubDuration()等方法时先进行错误处理判断,除非你能确保传入参数无误
907+ > 建议使用SetTimezone()、Parse()、ParseByFormat()、AddDuration()、SubDuration()、SetLocale() 等方法时先进行错误处理判断,除非你能确保传入参数无误
837908#### 附录
838909##### <a id="格式化符号表">格式化符号表</a>
839910| 符号 | 描述 | 长度 | 范围 | 示例 |
0 commit comments