def get_saku_immediately_before_target_day(target_day)
saku_date_time = target_day
day_of_first \
= AlmanacDateTime.new(target_day.year,
target_day.month,
target_day.day,
0,
0,
0,
target_day.offset)
day_of_end \
= AlmanacDateTime.new(target_day.year,
target_day.month,
target_day.day,
23,
59,
59,
target_day.offset)
temporary_day = 0
i = 0
while i < 30
subtract_first_elos_from_first_elom \
= ajd_to_elom(day_of_first.ajd) - ajd_to_elos(day_of_first.ajd)
subtract_end_elos_from_first_elom \
= ajd_to_elom(day_of_end.ajd) - ajd_to_elos(day_of_end.ajd)
if subtract_first_elos_from_first_elom >= 0 && \
subtract_first_elos_from_first_elom < CONSTANT_OF_PERIODIC_LUNAR_AGE && \
subtract_end_elos_from_first_elom < 0 && \
subtract_end_elos_from_first_elom >= -CONSTANT_OF_PERIODIC_LUNAR_AGE
temporary_day = i
break
end
if subtract_first_elos_from_first_elom < 0 && \
subtract_first_elos_from_first_elom >= -CONSTANT_OF_PERIODIC_LUNAR_AGE && \
subtract_end_elos_from_first_elom >= 0 && \
subtract_end_elos_from_first_elom < CONSTANT_OF_PERIODIC_LUNAR_AGE
temporary_day = i
break
end
i += 1
day_of_first -= 1
day_of_end -= 1
end
saku_date_time -= i
return saku_date_time
end