|
9 | 9 | } |
10 | 10 | if (fromTimezone !== toTimezone) { |
11 | 11 | const timeText = elem.innerHTML; |
| 12 | + let fromDateText = elem.dataset.date; |
| 13 | + if (!fromDateText) |
| 14 | + fromDateText = "2020-04-13"; |
| 15 | + /* conversion */ |
12 | 16 | const [validFromTimezone, utcOffset] = getValidTimezone(fromTimezone); |
13 | | - const dateTimeString = "2020-04-13T" + reformatTimeString(timeText) + utcOffset; |
| 17 | + const dateTimeString = reformatTimeString(timeText, fromDateText) + utcOffset; |
14 | 18 | const [validToTimezone,offset] = getValidTimezone(toTimezone); |
15 | 19 | const converted = new Date(dateTimeString).toLocaleString("en-GB", {timeZone: validToTimezone}); |
| 20 | + /* check date of converted time and add (next day) string to result if +1 day */ |
| 21 | + const convertedDateOnly = new Date(dateTimeString).toLocaleString("en-GB", {timeZone: validToTimezone, year:'numeric', month:'2-digit', day:'2-digit'}); |
| 22 | + let toDateText = convertedDateOnly.split('/'); |
| 23 | + toDateText = [toDateText[2], toDateText[1], toDateText[0]].join('-'); |
16 | 24 | const newTimeArray = converted.split(" ")[1].split(":"); |
17 | | - const newTime = newTimeArray[0] + ":" + newTimeArray[1]; |
| 25 | + let newTime = newTimeArray[0] + ":" + newTimeArray[1]; |
| 26 | + if (toDateText > fromDateText) |
| 27 | + newTime += " (next day)"; |
| 28 | + /* set new value */ |
18 | 29 | elem.innerHTML = newTime; |
19 | 30 | elem.dataset.timezone = toTimezone; |
| 31 | + elem.dataset.date = toDateText; |
20 | 32 | } |
21 | 33 | } |
22 | 34 | } |
23 | | - function reformatTimeString(timeString) { |
24 | | - const re = /(\d?\d:\d\d)(am|pm|AM|PM)?/; |
| 35 | + |
| 36 | + /* |
| 37 | + Convert date time string into a format accepted by Date object |
| 38 | + */ |
| 39 | + function reformatTimeString(timeString, dateString) { |
| 40 | + const re = /(\d?\d:\d\d)(am|pm|AM|PM)?( \(next day\))?/; |
25 | 41 | const parsed = timeString.match(re); |
26 | 42 | if (parsed) { |
27 | 43 | const hourMinArray = parsed[1].split(":"); |
|
33 | 49 | } |
34 | 50 | } |
35 | 51 | const hourString = hour.toString().padStart(2, '0'); |
36 | | - return hourString + ":" + hourMinArray[1]; |
| 52 | + if (dateString) |
| 53 | + return dateString + "T" + hourString + ":" + hourMinArray[1]; |
| 54 | + else |
| 55 | + return "2020-04-13T" + hourString + ":" + hourMinArray[1]; |
37 | 56 | } |
38 | 57 | else |
39 | 58 | return null |
|
0 commit comments