Function: org-duration-to-minutes

org-duration-to-minutes is an autoloaded and byte-compiled function defined in org-duration.el.gz.

Signature

(org-duration-to-minutes DURATION &optional CANONICAL)

Documentation

Return number of minutes of DURATION string.

When optional argument CANONICAL is non-nil, ignore org-duration-units and use standard time units value.

A bare number is translated into minutes. The empty string is translated into 0.0.

Return value as a float. Raise an error if duration format is not recognized.

Aliases

org-hh:mm-string-to-minutes (obsolete since 9.1) org-duration-string-to-minutes (obsolete since 9.1)

Source Code

;; Defined in /usr/src/emacs/lisp/org/org-duration.el.gz
;;;###autoload
(defun org-duration-to-minutes (duration &optional canonical)
  "Return number of minutes of DURATION string.

When optional argument CANONICAL is non-nil, ignore
`org-duration-units' and use standard time units value.

A bare number is translated into minutes.  The empty string is
translated into 0.0.

Return value as a float.  Raise an error if duration format is
not recognized."
  (save-match-data
    (cond
     ((equal duration "") 0.0)
     ((numberp duration) (float duration))
     ((string-match-p org-duration--h:mm-re duration)
      (pcase-let ((`(,hours ,minutes ,seconds)
		   (mapcar #'string-to-number (split-string duration ":"))))
        (+ (/ (or seconds 0) 60.0) minutes (* 60 hours))))
     ((string-match-p org-duration--full-re duration)
      (let ((minutes 0)
	    (s 0))
        (while (string-match org-duration--unit-re duration s)
	  (setq s (match-end 0))
	  (let ((value (string-to-number (match-string 1 duration)))
                (unit (match-string 2 duration)))
	    (cl-incf minutes (* value (org-duration--modifier unit canonical)))))
        (float minutes)))
     ((string-match org-duration--mixed-re duration)
      (let ((units-part (match-string 1 duration))
	    (hms-part (match-string 2 duration)))
        (+ (org-duration-to-minutes units-part)
	   (org-duration-to-minutes hms-part))))
     ((string-match-p "\\`[0-9]+\\(\\.[0-9]*\\)?\\'" duration)
      (float (string-to-number duration)))
     (t (error "Invalid duration format: %S" duration)))))