« ^ »

決算月、年度、期首、期末について考える

所要時間: 約 2分

年度 の数字はどれになるのか調べたが今一よくわからない。決算月という 概念があると考えると、決算月の翌月1日は起算日となる。その起算日の年が そのまま年度の数字となる。西暦の場合、単純に数字が増えていくだけなので そのまま数字を使えばよい。元号の場合、起算日の年の年号をそのまま使用す ることになると思われる。ただし、どこかにそのルールがあるのかどうかよく わからなかった。

決算月と年度が決定すると期首と期末は算出できる。

決算月年度期首期末
3月20202020-04-012021-03-31
6月20202020-07-012021-06-30
9月20202020-10-012021-09-30
12月20202020-01-012020-12-31
2020年度の決算月毎の期首と期末
決算月年度期首期末
3月20212021-04-012022-03-31
6月20212021-07-012022-06-30
9月20212021-10-012022-09-30
12月20212021-01-012021-12-31
2021年度の決算月毎の期首と期末

決算月と年度からその年度の期首を求める関数を実装した。

(defun finance-get-fiscal-starting-time (closing-month fiscal-year)
  (encode-time 0 0 0
	       1  ;; day
	       (+ 1 (mod closing-month 12))  ;; month
	       fiscal-year
	       ))
決算月と年度からその年度の期首を求める

finance-get-fiscal-starting-time 関数では期首を算出できるため、その値から期末を求める関数を実装した。

(defun finance-get-fiscal-closing-time (starting-time)
  (let ((starting-data (decode-time starting-time)))
    (encode-time
     (nth 0 starting-data)  ;; sec
     (nth 1 starting-data)  ;; minute
     (nth 2 starting-data)  ;; hour
     (- (nth 3 starting-data) 1) ;; day
     (nth 4 starting-data)  ;; month
     (+ (nth 5 starting-data) 1) ;; year
     (nth 6 starting-data)  ;; zone
     )))
期首からその年度の期末を求める

さらに決算月と現在日時から、年度の値を求める関数を実装した1

(defun finance-get-fiscal-year (closing-month target-time)
  (let* ((target-date (decode-time target-time))
	 (target-year (nth 5 target-date))
	 (beginning_of_month (+ 1 (mod (+ 1 closing-month) 12))))
    (if (<= beginning_of_month month)
        year
      (- year 1))))
決算月と指定した日時から年度の値を求める

脚注


1

この関数は以前実装した関数に手を加えたものとなっている。以前の実装については次を参照のこと。期首月と年月から年度を取得するEmacs Lisp