help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: even elder races get tired of waiting


From: Jean Louis
Subject: Re: even elder races get tired of waiting
Date: Mon, 22 Mar 2021 10:48:11 +0300
User-agent: Mutt/2.0.6 (2021-03-06)

* Emanuel Berg via Users list for the GNU Emacs text editor 
<help-gnu-emacs@gnu.org> [2021-03-22 01:31]:
> >> OK? And days start at 00:00?
> >
> > Good question!
> >
> > There are few definitions for days, some definitions will
> > say it starts at zero, some others will tell it is interval
> > of 24 hours, not necessarily starting at zero, and some
> > definition will speak of daylight period. [...]
> 
> How do you suggest I improve the function?

Maybe you should first define what is meant with `days-from-date'. I
like that type of functions and I was looking for that in pure Emacs
lisp, and found the same what you already implemented that it could be
possible to calculate with dates and get differences. Yet I am still
sticking to external PostgreSQL based solutions.

Your function brought me to thinking and I am still confused if I was
calculating well the periods of time from one to other date, but no
human so far complained, that is why I said that human error makes the
functions work any way.

If you wish to say that `days-from-date' is calculated purely
mathematically, then what is the meaning of "from date", does it
include the date or it starts after the date? We have seen how humans
calculate "from date" often by including the date, like in:

In "We work from Monday to Friday" the expression "from" and "to"
includes both the beginning day and the ending day.

Because of so much ambiguity you would need to define what
`days-from-date' is meant to represent. 

(require 'cl-lib)
(defun days-from-date (d1 d2)
  (let*((sep     "-")
        (d1-data (cl-map 'list #'string-to-number (split-string d1 sep)))
        (d2-data (cl-map 'list #'string-to-number (split-string d2 sep)))
        (y1      (car   d1-data))
        (m1      (cadr  d1-data))
        (d1      (caddr d1-data))
        (y2      (car   d2-data))
        (m2      (cadr  d2-data))
        (d2      (caddr d2-data)) )
    (days-from y1 m1 d1 y2 m2 d2) ))
;; (days-from-date "2021-03-19" "2021-04-20") ; 31

Gives me 32 now.

(defun days-from (y1 m1 d1 y2 m2 d2)
  (let*((s-then (float-time (encode-time 0 0 0 d1 m1 y1)))
        (s-now  (float-time (encode-time 0 0 0 d2 m2 y2)))
        (s-diff (- s-now s-then)) )
    (string-to-number (format-seconds "%d" s-diff) )))
;; (days-from 2021 03 19 2021 04 20) ; 31

Now the above gives me 32 in this moment March 22 10:40 EAT, how
comes? It was giving me 31 before.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]