[英]Compute the duration of appointment in an org-mode table
我有以下風格的約會列表:
| Appointment | Dur. |
|------------------------------+-------|
| <2014-02-20 Thu 09:30-18:30> | ??? |
| <2014-02-22 Sat 09:00-10:00> | ??? |
| | |
如何讓orgmode計算約會的持續時間?
組織模式允許您指定用於計算給定列的值的公式。 您可以在這些公式中執行elisp代碼。 我們可以使用功能來實現您想要的功能,我們需要定義一些能夠找到時間差異的功能。 您可以將以下內容添加到組織文檔中
#+begin_src emacs-lisp
(defun my-get-number-of-minutes (time)
(+ (* (nth 2 time) 60) (nth 1 time)))
(defun my-get-time-diff (t1 t2)
(- (my-get-number-of-minutes t1) (my-get-number-of-minutes t2)))
(defun my-get-duration (time-string)
(let* ((times (split-string (substring time-string 16 -1) "-"))
(minute-diff (my-get-time-diff (parse-time-string (nth 1 times))
(parse-time-string (nth 0 times)))))
(format "%dhrs %dmins" (/ minute-diff 60) (% minute-diff 60))))
#+end_src
然后在#+begin-src emacs-lisp
和#+end-src
標簽之間的任何地方執行Cc Cc ,這將評估elisp。
要么
只需將elisp代碼(在#+begin_src emacs-lisp
#+end-src
)復制到*scratch*
buffer並執行Mx eval-buffer
RET 。
現在我們已經定義了函數,我們可以告訴org-mode公式來計算第一列的第二列,為此只需將以下行粘貼到org-table下面
#+TBLFM: $2='(my-get-duration $1)
這告訴org第2列( $2
)的值是my-get-duration
應用的函數'第1列的值'( $2
)。 然后用線上的點做Cc Cc ,如果你做得很好,第二列應填充持續時間。
注意:代碼假定日期時間與示例中給出的格式相同。
我建議你閱讀本關於組織模式的能力,電子表格短文。
UPDATE
如果您可以按如下方式重新格式化表格,則可以簡化公式
| Appointment | Start | End | Duration |
|------------------+-------+-------+----------|
| <2014-02-20 Thu> | 09:30 | 18:30 | ??? |
| <2014-02-22 Sat> | 09:00 | 10:00 | ??? |
現在計算持續時間的公式就是這樣
#+TBLFM: $4=$3-$2;T
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.