38

そのため、職場ではフレックスタイム (フレックス時間、フレックス時間...) を使用しています。これは便利ですが、追跡するのが難しい場合があります。私は現在、組織モードを使用して自分の時間を記録しています ( org-clock-(out|in)) が、それを拡張して、8 時間以上働いたかどうかを自動的に計算できるようにしたいと考えています (余った時間は、フレックスタイムの「アカウント」に追加する必要があります)。少ない(昼休みの長さなどによって異なります)、フレックスタイムの「アカウント」の残高など。

他の誰かがこれに Emacs を使用していますか?

現在、時間を追跡するために非常に基本的なセットアップを使用しています。

(defun check-in ()
  (interactive)
  (let (pbuf (current-buffer))
    (find-file (convert-standard-filename "whatnot"))
    (goto-char (point-max))
    (insert "\n")
    (org-insert-heading)
    (org-insert-time-stamp (current-time))
    (org-clock-in)
    (save-buffer)
    (switch-to-buffer pbuf)))

(defun check-out ()
  (interactive)
  (let (pbuf (current-buffer))
    (find-file (convert-standard-filename "whatnot"))
    (goto-char (point-max))
    (org-clock-out)
    (save-buffer)
    (switch-to-buffer pbuf)))
4

1 に答える 1

4

あなたの問題を正しく理解していると仮定して、簡単な解決策をハックしました. まず、チェックインとチェックアウトを複数回行う場合は、アウトライン エントリを 1 日に 1 つだけ作成するようにしてください。特定の日の残業時間を計算する次の関数を定義します。

(defun compute-overtime (duration-string)
  "Computes overtime duration string for the given time DURATION-STRING."
  (let (minutes-in-a-workday
        work-minutes
        overtime-minutes)
    (defconst minutes-in-a-workday 480)
    (setq work-minutes (org-duration-string-to-minutes duration-string)
          overtime-minutes (- work-minutes minutes-in-a-workday))
    (if (< overtime-minutes 0) (setq overtime-minutes 0))
    (org-minutes-to-hh:mm-string overtime-minutes)))

次に、これをファイルのクロック テーブル式で使用しますwhatnot

#+BEGIN: clocktable :maxlevel 1 :emphasize nil :scope file :formula "$3='(compute-overtime $2)::@2$3=string(\"Overtime\")"    
#+END: clocktable

C-c C-c時計台にいるときにヒットすると再生します。

別の式を使用して残業時間を合計すると、残業の合計を取得できます。しかし、私はそれを解決していません。

于 2012-10-06T08:44:20.813 に答える