From f64dd0860fde4a04d9298b7c37430996fcc73efb Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Wed, 14 Aug 2019 13:32:20 +0800 Subject: [PATCH] Bug 752395 - Start Day of weekly report doesn't respond to change in locale Redefines some functions to ensure weekly grouping in transaction report obeys locale's start-of-week. --- libgnucash/app-utils/date-utilities.scm | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/libgnucash/app-utils/date-utilities.scm b/libgnucash/app-utils/date-utilities.scm index e2e8216ac2..4ecdb9311c 100644 --- a/libgnucash/app-utils/date-utilities.scm +++ b/libgnucash/app-utils/date-utilities.scm @@ -84,11 +84,9 @@ (gnc-print-time64 (gnc-mktime datevec) "%B %Y")) (define (gnc:date-get-week-year-string datevec) - (let* ((beginweekt64 (* (gnc:time64-get-week - (gnc-mktime datevec)) - 604800)) - (begin-string (qof-print-date (+ beginweekt64 345600))) - (end-string (qof-print-date (+ beginweekt64 864000)))) + (let* ((beginweekt64 (* (gnc:time64-get-week (gnc-mktime datevec)) 7 86400)) + (begin-string (qof-print-date (+ beginweekt64 (* 3 86400)))) + (end-string (qof-print-date (+ beginweekt64 (* 9 86400))))) (format #f (_ "~a to ~a") begin-string end-string))) ;; is leap year? @@ -156,18 +154,21 @@ (gnc:date-get-month lt) (gnc:date-get-year lt)))))) -;; convert a date in seconds since 1970 into # of two-week periods since -;; Jan 4, 1970 ignoring leap-seconds (just halfing date-to-week-fraction) (define (gnc:date-to-twoweek-fraction caltime) (/ (gnc:date-to-week-fraction caltime) 2)) -;; convert a date in seconds since 1970 into # of weeks since Jan 4, 1970 -;; ignoring leap-seconds +;; which dow does the week start? 1=Sunday, 2=Monday etc +(define weekstart + (let ((dow (gnc-start-of-week))) + (cond + ((zero? dow) (gnc:warn "cannot determine start of week. using Sunday") 1) + (else dow)))) + (define (gnc:date-to-week-fraction caltime) - (/ (- (/ (/ caltime 3600.0) 24) 3) 7)) + (/ (- (/ caltime 86400) 1 weekstart) 7)) (define (gnc:date-to-week caltime) - (floor (/ (- (/ caltime 86400) 3) 7))) + (floor (gnc:date-to-week-fraction caltime))) ;; convert a date in seconds since 1970 into # of days since Feb 28, 1970 ;; ignoring leap-seconds