( dateFormatter: DateFormatter, stringFormatter: LocalizedStringFormatter, start: CalendarDate, end: CalendarDate, timeZone: string )
| 143 | } |
| 144 | |
| 145 | function formatRange( |
| 146 | dateFormatter: DateFormatter, |
| 147 | stringFormatter: LocalizedStringFormatter, |
| 148 | start: CalendarDate, |
| 149 | end: CalendarDate, |
| 150 | timeZone: string |
| 151 | ) { |
| 152 | let parts = dateFormatter.formatRangeToParts(start.toDate(timeZone), end.toDate(timeZone)); |
| 153 | |
| 154 | // Find the separator between the start and end date. This is determined |
| 155 | // by finding the last shared literal before the end range. |
| 156 | let separatorIndex = -1; |
| 157 | for (let i = 0; i < parts.length; i++) { |
| 158 | let part = parts[i]; |
| 159 | if (part.source === 'shared' && part.type === 'literal') { |
| 160 | separatorIndex = i; |
| 161 | } else if (part.source === 'endRange') { |
| 162 | break; |
| 163 | } |
| 164 | } |
| 165 | |
| 166 | // Now we can combine the parts into start and end strings. |
| 167 | let startValue = ''; |
| 168 | let endValue = ''; |
| 169 | for (let i = 0; i < parts.length; i++) { |
| 170 | if (i < separatorIndex) { |
| 171 | startValue += parts[i].value; |
| 172 | } else if (i > separatorIndex) { |
| 173 | endValue += parts[i].value; |
| 174 | } |
| 175 | } |
| 176 | |
| 177 | return stringFormatter.format('dateRange', {startDate: startValue, endDate: endValue}); |
| 178 | } |
no test coverage detected