LP#1831784: fix Angular's formatting of DOB field
authorGalen Charlton <gmc@equinoxinitiative.org>
Mon, 6 May 2019 21:41:31 +0000 (17:41 -0400)
committerBill Erickson <berickxx@gmail.com>
Wed, 31 Jul 2019 15:08:27 +0000 (11:08 -0400)
Otherwise, depending on the local time zone, the date displayed
could be off a day.

The 'dob' columns are currently the the _only_ database/IDL fields
that are truly dates, not timestamps, hence the hard-coded exception.
However, an alternative approach would be to define a new 'date'
field type in the IDL.

To test
-------
[1] Construct an eg-grid (say, on the Angular sandbox page) that retrieves
    patron records. For users in North America, the birth dates are
    likely off by a day.
[2] Apply the patch and repeat step 1. This time, the birth dates should
    display as entered.

Sponsored-by: MassLNC
Sponsored-by: Georgia Public Library Service
Sponsored-by: Indiana State Library
Sponsored-by: CW MARS
Sponsored-by: King County Library System
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Open-ILS/src/eg2/src/app/core/format.service.ts

index b0e8072..63aeec6 100644 (file)
@@ -116,7 +116,15 @@ export class FormatService {
                 if (params.datePlusTime) {
                     fmt = this.dateTimeFormat || 'short';
                 }
-                return this.datePipe.transform(date, fmt);
+                let tz;
+                if (params.idlField === 'dob') {
+                    // special case: since dob is the only date column that the
+                    // IDL thinks of as a timestamp, the date object comes over
+                    // as a UTC value; apply the correct timezone rather than the
+                    // local one
+                    tz = 'UTC';
+                }
+                return this.datePipe.transform(date, fmt, tz);
 
             case 'money':
                 return this.currencyPipe.transform(value);