Create make-ts-date

The tests for previous-week-start now pass.
This commit is contained in:
contrapunctus 2020-05-17 02:28:07 +05:30
parent 666d9e0726
commit fd4dc7008b
4 changed files with 93 additions and 25 deletions

View File

@ -156,12 +156,12 @@ If the day of TS is the same as the
`chronometrist-report-week-start-day', return TS.
TS must be a ts struct (see `ts.el')."
(let ((ts (ts-update ts)))
(cl-loop
until (equal chronometrist-report-week-start-day
(ts-day-name ts))
do (ts-decf (ts-day ts))
finally return ts)))
;; (message "%s" (ts-format ts))
(cl-loop
until (equal chronometrist-report-week-start-day
(ts-day-name ts))
do (ts-decf (ts-day ts))
finally return ts))
;; Local Variables:
;; nameless-current-name: "chronometrist-common"

View File

@ -30,6 +30,18 @@
;; (defun chronometrist-iso-8601-timestamp->ts (iso-8601-string))
(defun chronometrist-make-ts-date (date)
"Return a TS struct (see `ts.el') representing DATE.
DATE should be an ISO-8601 date string (\"YYYY-MM-DD\")."
(let* ((date-list (mapcar #'string-to-number
(split-string date "-")))
(day (caddr date-list))
(month (cadr date-list))
(year (car date-list)))
(ts-update
(make-ts :hour 0 :minute 0 :second 0
:day day :month month :year year))))
(defun chronometrist-date (&optional time)
"Return date for TIME or today, in the form \"YYYY-MM-DD\"."
(s-left 10 (chronometrist-format-time-iso8601 time)))

View File

@ -58,8 +58,9 @@
| 9. | minutes | minutes as an integer |
| 10. | iso-timestamp | "YYYY-MM-DDTHH:MM:SSZ" |
| 11. | iso-date | "YYYY-MM-DD" |
| 12. | (DEPRECATED) timeclock-timestamp | "year/month/day hours:minutes:seconds" |
| 13. | (DEPRECATED) timeclock-date | "year/month/day" |
| 12. | ts | ts.el struct |
| 13. | (DEPRECATED) timeclock-timestamp | "year/month/day hours:minutes:seconds" |
| 14. | (DEPRECATED) timeclock-date | "year/month/day" |
*** chronometrist-common.el
1. Variable - chronometrist-empty-time-string
@ -77,7 +78,8 @@
* (event ...) -> ((encode-time encode-time) ...)
12. Function - chronometrist-time-list->sum-of-intervals (time-value-lists)
* ((encode-time encode-time) ...) -> encode-time
13. Function - chronometrist-previous-week-start (date-string)
13. Function - chronometrist-previous-week-start (ts)
* ts -> ts
*** chronometrist-custom.el
1. Custom variable - chronometrist-file
2. Custom variable - chronometrist-buffer-name
@ -232,26 +234,28 @@
14. Command - chronometrist-statistics-next-range (arg)
*** chronometrist-time.el
1. Constant - chronometrist-seconds-in-day
2. Function - chronometrist-date (&optional time)
3. Function - chronometrist-day-of-week->number (day-of-week)
4. Function - chronometrist-number->day-of-week (number)
5. Function - chronometrist-format-time-iso8601 (&optional unix-time)
6. Function - chronometrist-time-interval-span-midnight? (t1 t2)
2. Function - chronometrist-make-ts-date (date)
* iso-date -> ts
3. Function - chronometrist-date (&optional time)
4. Function - chronometrist-day-of-week->number (day-of-week)
5. Function - chronometrist-number->day-of-week (number)
6. Function - chronometrist-format-time-iso8601 (&optional unix-time)
7. Function - chronometrist-time-interval-span-midnight? (t1 t2)
* list-timestamp list-timestamp -> Boolean
7. Function - chronometrist-midnight-spanning-p (start-time stop-time)
8. Function - chronometrist-time->seconds (time)
8. Function - chronometrist-midnight-spanning-p (start-time stop-time)
9. Function - chronometrist-time->seconds (time)
* vector-duration -> seconds
9. Function - chronometrist-seconds-to-hms (seconds)
* seconds -> vector-duration
10. Function - chronometrist-time-add (a b)
10. Function - chronometrist-seconds-to-hms (seconds)
* seconds -> vector-duration
11. Function - chronometrist-time-add (a b)
* vector-duration vector-duration -> vector-duration
11. Function - chronometrist-iso-date->timestamp (date)
12. Function - chronometrist-iso-date->timestamp (date)
* iso-date -> iso-timestamp
12. Function - chronometrist-date->time (date)
13. Function - chronometrist-date-less-p (date1 date2)
14. Function - chronometrist-time-less-or-equal-p (t1 t2)
15. Function - chronometrist-calendrical->date (date)
16. Function - chronometrist-interval (event)
13. Function - chronometrist-date->time (date)
14. Function - chronometrist-date-less-p (date1 date2)
15. Function - chronometrist-time-less-or-equal-p (t1 t2)
16. Function - chronometrist-calendrical->date (date)
17. Function - chronometrist-interval (event)
* event -> encode-time
*** chronometrist-timer.el
1. Internal Variable - chronometrist--timer-object

View File

@ -0,0 +1,52 @@
;;; -*- lexical-binding: t; -*-
(require 'buttercup)
(require 'chronometrist-common)
(describe
"chronometrist-format-time"
(it "works with lists"
(expect (chronometrist-format-time '( 0 0 0))
:to-be " -")
(expect (chronometrist-format-time '( 0 0 1))
:to-be " 1")
(expect (chronometrist-format-time '( 0 0 10))
:to-be " 10")
(expect (chronometrist-format-time '( 0 1 10))
:to-be " 1:10")
(expect (chronometrist-format-time '( 0 10 10))
:to-be " 10:10")
(expect (chronometrist-format-time '( 1 10 10))
:to-be " 1:10:10")
(expect (chronometrist-format-time '(10 10 10))
:to-be "10:10:10"))
(it "also works with vectors"
(expect (chronometrist-format-time '[ 0 0 0])
:to-be " -")
(expect (chronometrist-format-time '[ 0 0 1])
:to-be " 1")
(expect (chronometrist-format-time '[ 0 0 10])
:to-be " 10")
(expect (chronometrist-format-time '[ 0 1 10])
:to-be " 1:10")
(expect (chronometrist-format-time '[ 0 10 10])
:to-be " 10:10")
(expect (chronometrist-format-time '[ 1 10 10])
:to-be " 1:10:10")
(expect (chronometrist-format-time '[10 10 10])
:to-be "10:10:10")))
(describe
"chronometrist-previous-week-start"
:var ((chronometrist-report-week-start-day "Sunday")
(ts (chronometrist-make-ts-date "2018-09-02")))
(it "should work with Sundays"
(should (ts= (chronometrist-previous-week-start
(chronometrist-make-ts-date "2018-09-01"))
(chronometrist-make-ts-date "2018-08-26")))
(should (ts= ts (chronometrist-previous-week-start (chronometrist-make-ts-date "2018-09-02"))))
(should (ts= ts (chronometrist-previous-week-start (chronometrist-make-ts-date "2018-09-03"))))
(should (ts= ts (chronometrist-previous-week-start (chronometrist-make-ts-date "2018-09-04"))))
(should (ts= ts (chronometrist-previous-week-start (chronometrist-make-ts-date "2018-09-05"))))
(should (ts= ts (chronometrist-previous-week-start (chronometrist-make-ts-date "2018-09-06"))))
(should (ts= ts (chronometrist-previous-week-start (chronometrist-make-ts-date "2018-09-07"))))
(should (ts= ts (chronometrist-previous-week-start (chronometrist-make-ts-date "2018-09-08"))))))