그것은 당신을 도울 수 있습니다
| 16:00 | 1 | 8:00 |
| 1d 16:00 | 3 | 16:00 |
| 8:00 | 3 | -16:00 |
| -8:00 | 2 | -1d 0:00 |
| -1d 16:00 | -6 | 8:00 |
| 8:00 | 1 | 0:00 |
#+TBLFM: $3='(calculate-hours $1 $2 8)
(defun calculate-hours (sumhours numdays hours-per-day)
(if (string-match
"\\(-*?\\)\\([0-9]*?\\)\\(?:d \\)*\\([0-9]+\\):\\([0-9]+\\)"
sumhours)
(let* ((input-sign (match-string 1 sumhours))
(total-days
(string-to-number (match-string 2 sumhours)))
(total-hours
(+ (* total-days 24)
(string-to-number (match-string 3 sumhours))
(/ (string-to-number (match-string 4 sumhours)) 60.0)))
(forecast-hours
(- (if (string-equal input-sign "-")
(* -1 total-hours)
total-hours)
(* hours-per-day (string-to-number numdays))))
(sign (if (>= (signum forecast-hours) 0) "" "-"))
(forecast-hours (abs forecast-hours)))
(if (>= forecast-hours 24)
(let ((forecast-days
(truncate (/ forecast-hours 24))))
(concat
sign
(number-to-string forecast-days)
"d "
(number-to-string
(- (/ (truncate (* forecast-hours 100)) 100) (* forecast-days 24)))
":00"))
(concat
sign
(number-to-string
(/ (truncate (* forecast-hours 100)) 100)) ":00"))) 0.0))
와우 그게 전부 AA의 입 : 조직 테이블에는 아주 좋은 시간 수학 지원이 있지만, 그래서 나는 오히려 저것을 선호하십시오. 비록 노력을 가져 주셔서 감사합니다 :) – Arg
나는 같은 문제에 대한 쉬운 해결책을 찾지 못해서 기한 내에 그것을 써야했습니다 :) – artscan