簡體   English   中英

計算組織模式表中的約會持續時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM