mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-05-04 04:20:53 +08:00
🎨 改进闪卡下一轮重复时间显示精度 https://github.com/siyuan-note/siyuan/issues/7672
This commit is contained in:
parent
1d1d49d7b5
commit
37f4191962
@ -233,7 +233,7 @@ type Flashcard struct {
|
|||||||
func newFlashcard(card riff.Card, blockID, deckID string, now time.Time) *Flashcard {
|
func newFlashcard(card riff.Card, blockID, deckID string, now time.Time) *Flashcard {
|
||||||
nextDues := map[riff.Rating]string{}
|
nextDues := map[riff.Rating]string{}
|
||||||
for rating, due := range card.NextDues() {
|
for rating, due := range card.NextDues() {
|
||||||
nextDues[rating] = strings.TrimSpace(util.HumanizeRelTime(due, now, Conf.Lang))
|
nextDues[rating] = strings.TrimSpace(util.HumanizeDiffTime(due, now, Conf.Lang))
|
||||||
}
|
}
|
||||||
|
|
||||||
return &Flashcard{
|
return &Flashcard{
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
package util
|
package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -38,6 +40,96 @@ func CurrentTimeSecondsStr() string {
|
|||||||
return time.Now().Format("20060102150405")
|
return time.Now().Format("20060102150405")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func HumanizeDiffTime(a, b time.Time, lang string) string {
|
||||||
|
labels := TimeLangs[lang]
|
||||||
|
year, month, day, hour, min, _ := humanizeDiffTime(a, b)
|
||||||
|
buf := bytes.Buffer{}
|
||||||
|
if 0 < year {
|
||||||
|
if 1 == year {
|
||||||
|
buf.WriteString(fmt.Sprintf(labels["1y"].(string), " "))
|
||||||
|
} else {
|
||||||
|
buf.WriteString(fmt.Sprintf(labels["xy"].(string), year, " "))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if 0 < month {
|
||||||
|
if 1 == month {
|
||||||
|
buf.WriteString(fmt.Sprintf(labels["1M"].(string), " "))
|
||||||
|
} else {
|
||||||
|
buf.WriteString(fmt.Sprintf(labels["xM"].(string), month, " "))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if 0 < day {
|
||||||
|
if 1 == day {
|
||||||
|
buf.WriteString(fmt.Sprintf(labels["1d"].(string), " "))
|
||||||
|
} else {
|
||||||
|
buf.WriteString(fmt.Sprintf(labels["xd"].(string), day, " "))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if 0 < hour {
|
||||||
|
if 1 == hour {
|
||||||
|
buf.WriteString(fmt.Sprintf(labels["1h"].(string), " "))
|
||||||
|
} else {
|
||||||
|
buf.WriteString(fmt.Sprintf(labels["xh"].(string), hour, " "))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if 0 < min {
|
||||||
|
if 1 == min {
|
||||||
|
buf.WriteString(fmt.Sprintf(labels["1m"].(string), " "))
|
||||||
|
} else {
|
||||||
|
buf.WriteString(fmt.Sprintf(labels["xm"].(string), min, " "))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return strings.TrimSpace(buf.String())
|
||||||
|
}
|
||||||
|
|
||||||
|
func humanizeDiffTime(a, b time.Time) (year, month, day, hour, min, sec int) {
|
||||||
|
// 感谢 https://stackoverflow.com/a/36531443/1043233
|
||||||
|
|
||||||
|
if a.Location() != b.Location() {
|
||||||
|
b = b.In(a.Location())
|
||||||
|
}
|
||||||
|
if a.After(b) {
|
||||||
|
a, b = b, a
|
||||||
|
}
|
||||||
|
y1, M1, d1 := a.Date()
|
||||||
|
y2, M2, d2 := b.Date()
|
||||||
|
|
||||||
|
h1, m1, s1 := a.Clock()
|
||||||
|
h2, m2, s2 := b.Clock()
|
||||||
|
|
||||||
|
year = y2 - y1
|
||||||
|
month = int(M2 - M1)
|
||||||
|
day = d2 - d1
|
||||||
|
hour = h2 - h1
|
||||||
|
min = m2 - m1
|
||||||
|
sec = s2 - s1
|
||||||
|
|
||||||
|
// Normalize negative values
|
||||||
|
if sec < 0 {
|
||||||
|
sec += 60
|
||||||
|
min--
|
||||||
|
}
|
||||||
|
if min < 0 {
|
||||||
|
min += 60
|
||||||
|
hour--
|
||||||
|
}
|
||||||
|
if hour < 0 {
|
||||||
|
hour += 24
|
||||||
|
day--
|
||||||
|
}
|
||||||
|
if day < 0 {
|
||||||
|
// days in month:
|
||||||
|
t := time.Date(y1, M1, 32, 0, 0, 0, 0, time.UTC)
|
||||||
|
day += 32 - t.Day()
|
||||||
|
month--
|
||||||
|
}
|
||||||
|
if month < 0 {
|
||||||
|
month += 12
|
||||||
|
year--
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func HumanizeRelTime(a time.Time, b time.Time, lang string) string {
|
func HumanizeRelTime(a time.Time, b time.Time, lang string) string {
|
||||||
_, magnitudes := humanizeTimeMagnitudes(lang)
|
_, magnitudes := humanizeTimeMagnitudes(lang)
|
||||||
return strings.TrimSpace(humanize.CustomRelTime(a, b, "", "", magnitudes))
|
return strings.TrimSpace(humanize.CustomRelTime(a, b, "", "", magnitudes))
|
||||||
|
Loading…
Reference in New Issue
Block a user