0

小数年の日付の差を計算するための最良の方法は何ですか?

year(date1) - year(date2) always gives a whole number

unix_timestampを使用すると、うるう年とうるう年以外の値が異なります(つまり、20NN年3月1日から20NN + 1年3月1日までは常に1。00年である必要があります)。日付を月と日に分割して、実際には手作業で行うことができます。

しかし、私は最善の方法を探しています。つまり、最も簡単で、デバッグにかかる​​時間が最小限です(自分でやった場合は、夕方の半分をエッジケースのテストに費やします)。

4

2 に答える 2

1

私はあなたがあなたがしたいことをする簡単な方法を見つけるつもりはないと思います。10進値に変換するには、分子と分母がどうなるかを理解する必要があります。ご指摘のとおり、分母はうるう年からうるう年以外までさまざまです。そのため、1年のどの正確な日が365の分母を持ち、どの日が366の分母を持つかを定義する必要があります(つまり、うるう年の1月1日から12月31日までのすべての日で、分母が366になるか、分母が366になります)。うるう年の前の年の3月1日からうるう年の2月29日までの間に実行しますか?)

範囲内の各日の毎日の値(1/365または1/366)を合計する必要があります。うるう年の開始を1月1日と定義したとします。これでも、3月1日(うるう年)の正確な値は1になりません。3月1日(うるう年以外)の日によっては、 365と366の一部。

うるう年の前の年の3月1日から始まる366の分母を定義した場合、3月1日から3月1日の場合は正確に1を取得する必要がありますが、2月1日(うるう年)から8月1日(うるう年)を実行したい場合はどうなりますか?うるう年以外)。この6か月の差で、正確に0.5を取得することはできません。

私の推測では、あなたは次のようなことをすることによってあなたの数学を最もよく近似するかもしれないと思います

ROUND(( DATEDIFF(date1, date2) / 365.25), 2)

これにより、365日の差異(365 / 365.25 = 0.9993)および366日の差異(366 / 365.25 = 1.0021)に対して1.00が得られます。

もちろん、これは、3月2日(うるう年ではない年)-3月1日(うるう年ではない年)でも1.00の値が得られることを意味します。ただし、精度が小数点以下2桁の場合、それは365を分母として使用して受け取る値です(366/365 = 1.0027)

私たちのカレンダーシステムは、それに対して数学を行うのに実際には役立ちません。そのため、多くの場合、合理的な概算で生活し、その制限を理解する必要があります。

于 2012-11-28T23:29:37.817 に答える
0

あなたは次のような意味です:

select datediff(curdate(),'2000-01-01') / 365.25

于 2012-11-28T23:30:11.213 に答える