@
airbotgo #2 你似乎没有理解 #1 的用意。
> 如某事已经过去了 2000 天,如何转化为某事已经过去了“x 年 x 月 x 日”,关键这个“x 日”如何准确计算?
#1 的定义表明从 2000 天无法算出多少年多少月多少日,例如:
2000 年 8 月 31 日是 2000 年 7 月 31 日之后 31 日,也是它之后 0 年 1 月 0 日。
2000 年 10 月 1 日是 2000 年 8 月 31 日之后 31 日,但不是它之后 0 年 1 月 0 日。
同样是 31 日,不能得到它到底是不是 0 年 1 月 0 日。因此问题不成立,但如果你知道开始和结束的日子,则很容易根据定义计算到底是多少年多少月多少日,同理,如果一个软件采用了 #1 的定义,那么它并不是先算出多少日,再仅从多少日转换为多少年多少月多少日的,而是直接算出来。
如果你想问某个软件是如何计算多少年多少月多少日的,最好的方法是直接去看代码,毕竟不同的人定义不同。
如果你想问 #1 的定义下的最佳表达(年数最大的基础上月数最大)如何计算,下面是一种方法:
计算 a 年 b 月 c 日是 x 年 y 月 z 日之后的 u 年 v 月 w 日。假设 a b c d e f > 0 且不考虑历法变更而不存在的日子,这些数表达了存在的日子,且 x 年 y 月 z 日不早于 a 年 b 月 c 日。
https://gist.github.com/GeeLaw/9c68befab1b125a33c52deaf386bf92a