diff --git a/locale/ja-JP.go b/locale/ja-JP.go new file mode 100644 index 0000000..ce18ac0 --- /dev/null +++ b/locale/ja-JP.go @@ -0,0 +1,38 @@ +package locale + +import ( + "fmt" + "math" + "time" +) + +var japaneseJapan = Formatters{ + -1 << 63: func(d time.Duration) string { return fmt.Sprintf("%.0f年後", math.Ceil(-d.Hours()/(24.0*30*12))) }, + -17 * (24 * time.Hour) * 30: func(_ time.Duration) string { return "1年後" }, + -10 * (24 * time.Hour) * 30: func(d time.Duration) string { return fmt.Sprintf("%.0fヶ月後", math.Ceil(-d.Hours()/(24.0*30))) }, + -45 * (24 * time.Hour): func(d time.Duration) string { return "1ヶ月後" }, + -25 * (24 * time.Hour): func(d time.Duration) string { return fmt.Sprintf("%.0f日後", math.Ceil(-d.Hours()/24.0)) }, + -35 * time.Hour: func(_ time.Duration) string { return "1日後" }, + -21 * time.Hour: func(d time.Duration) string { return fmt.Sprintf("%.0f時間後", math.Ceil(-d.Hours())) }, + -89 * time.Minute: func(_ time.Duration) string { return "1時間後" }, + -44 * time.Minute: func(d time.Duration) string { return fmt.Sprintf("%.0f分後", math.Ceil(-d.Minutes())) }, + -89 * time.Second: func(_ time.Duration) string { return "1分後" }, + -44 * time.Second: func(_ time.Duration) string { return "数秒後" }, + + 44 * time.Second: func(_ time.Duration) string { return "数秒前" }, + 89 * time.Second: func(_ time.Duration) string { return "1分前" }, + 44 * time.Minute: func(d time.Duration) string { return fmt.Sprintf("%.0f分前", math.Ceil(d.Minutes())) }, + 89 * time.Minute: func(_ time.Duration) string { return "1時間前" }, + 21 * time.Hour: func(d time.Duration) string { return fmt.Sprintf("%.0f時間前", math.Ceil(d.Hours())) }, + 35 * time.Hour: func(_ time.Duration) string { return "1日前" }, + 25 * (24 * time.Hour): func(d time.Duration) string { return fmt.Sprintf("%.0f日前", math.Ceil(d.Hours()/24.0)) }, + 45 * (24 * time.Hour): func(d time.Duration) string { return "1ヶ月前" }, + 10 * (24 * time.Hour) * 30: func(d time.Duration) string { return fmt.Sprintf("%.0fヶ月前", math.Ceil(d.Hours()/(24.0*30))) }, + 17 * (24 * time.Hour) * 30: func(_ time.Duration) string { return "1年前" }, + 1<<63 - 1: func(d time.Duration) string { return fmt.Sprintf("%.0f年前", math.Ceil(d.Hours()/(24.0*30*12))) }, +} + +func init() { + Register("ja", japaneseJapan) + Register("ja-JP", japaneseJapan) +} \ No newline at end of file diff --git a/timediff_ja_JP_test.go b/timediff_ja_JP_test.go new file mode 100644 index 0000000..84a4e9f --- /dev/null +++ b/timediff_ja_JP_test.go @@ -0,0 +1,92 @@ +package timediff_test + +import ( + "fmt" + "testing" + + "github.com/mergestat/timediff" +) + +var fixtures_ja_JP = map[string]string{ + "-10s": "数秒前", + "-44s": "数秒前", + "-45s": "1分前", + "-89s": "1分前", + "-90s": "2分前", + "-91s": "2分前", + "-2m": "2分前", + "-10m": "10分前", + "-44m": "44分前", + "-45m": "1時間前", + "-60m": "1時間前", + "-1h": "1時間前", + "-80m": "1時間前", + "-89m": "1時間前", + "-90m": "2時間前", + "-2h": "2時間前", + "-20h": "20時間前", + "-21h": "21時間前", + "-21h30m": "1日前", + "-22h": "1日前", + "-24h": "1日前", + "-24h30m": "1日前", + "-34h59m": "1日前", + "-36h": "2日前", + fmt.Sprintf("-%dh", 10*24): "10日前", + fmt.Sprintf("-%dh", 25*24): "25日前", + fmt.Sprintf("-%dh", 26*24): "1ヶ月前", + fmt.Sprintf("-%dh", 45*24): "1ヶ月前", + fmt.Sprintf("-%dh2m", 45*24): "2ヶ月前", + fmt.Sprintf("-%dh", 46*24+1): "2ヶ月前", + fmt.Sprintf("-%dh", 80*24): "3ヶ月前", + fmt.Sprintf("-%dh", 9*24*30): "9ヶ月前", + fmt.Sprintf("-%dh", 10*24*30): "10ヶ月前", + fmt.Sprintf("-%dh1m", 10*24*30): "1年前", + fmt.Sprintf("-%dh", 12*24*30): "1年前", + fmt.Sprintf("-%dh", 17*24*30+1): "2年前", + fmt.Sprintf("-%dh", 24*24*30): "2年前", + fmt.Sprintf("-%dh", 20*24*30*12): "20年前", + fmt.Sprintf("-%dh", 100*24*30*12): "100年前", + + "10s": "数秒後", + "44s": "数秒後", + "45s": "1分後", + "89s": "1分後", + "90s": "2分後", + "2m": "2分後", + "10m": "10分後", + "44m": "44分後", + "45m": "1時間後", + "60m": "1時間後", + "1h": "1時間後", + "80m": "1時間後", + "89m": "1時間後", + "89m10s": "2時間後", + "90m": "2時間後", + "2h": "2時間後", + "20h": "20時間後", + "21h": "21時間後", + "21h30m": "1日後", + "22h": "1日後", + "24h": "1日後", + "35h10m": "2日後", + "36h": "2日後", + fmt.Sprintf("%dh", 10*24): "10日後", + fmt.Sprintf("%dh", 25*24): "25日後", + fmt.Sprintf("%dh", 26*24): "1ヶ月後", + fmt.Sprintf("%dh", 45*24): "1ヶ月後", + fmt.Sprintf("%dh1m", 45*24): "2ヶ月後", + fmt.Sprintf("%dh", 46*24): "2ヶ月後", + fmt.Sprintf("%dh", 80*24): "3ヶ月後", + fmt.Sprintf("%dh", 9*24*30): "9ヶ月後", + fmt.Sprintf("%dh", 10*24*30): "10ヶ月後", + fmt.Sprintf("%dh1m", 10*24*30): "1年後", + fmt.Sprintf("%dh", 12*24*30): "1年後", + fmt.Sprintf("%dh", 24*24*30): "2年後", + fmt.Sprintf("%dh", 20*24*30*12): "20年後", + fmt.Sprintf("%dh", 100*24*30*12): "100年後", +} + +func TestTimeDiffJaJP(t *testing.T) { + execFixtures(t, fixtures_ja_JP, timediff.WithLocale("ja-JP")) +}