Fixes DoB parsing in the browser client patron edit interface by
creating date objects from a whole YMD date string instead of compiling
the date as collection of pieces. Compiling dates from pieces (calling
setFullYear(), setMonth(), etc.) can have unexpected consequences,
because a change of month can result in a change of days as well, if the
number of days in the date object exceeds the capacity of the selected
month.
For example:
---
> d = new Date()
2018-05-31T14:59:26.186Z
> d.setMonth(1)
1520092766186
> d
2018-03-03T15:59:26.186Z
--
Parsing as Date(YYYY,MM,DD) instead avoids this kind of shuffling.
To test
[1] Log in to the staff client on the 31st day of the month :)
[2] Change a patron's DoB to a month that does not contain 31 days.
[3] Save patron and note on reload, the DoB shows the wrong value.
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
service.parse_dob = function(dob) {
if (!dob) return null;
var parts = dob.split('-');
- var d = new Date(); // always local time zone, yay.
- d.setFullYear(parts[0]);
- d.setMonth(parts[1] - 1);
- d.setDate(parts[2]);
- return d;
+ return new Date(parts[0], parts[1] - 1, parts[2])
}
service.copy_stage_data = function(user) {