(raw, name)
| 26 | } |
| 27 | |
| 28 | function readDate(raw, name) { |
| 29 | if (raw === undefined || raw === null || raw === '') return null; |
| 30 | const value = String(raw).trim(); |
| 31 | if (!DATE_RE.test(value)) { |
| 32 | throw new ArgumentError(`weibo user-posts ${name} must use YYYY-MM-DD`); |
| 33 | } |
| 34 | const date = new Date(`${value}T00:00:00+08:00`); |
| 35 | if (!Number.isFinite(date.getTime()) || value !== formatShanghaiDate(date)) { |
| 36 | throw new ArgumentError(`weibo user-posts ${name} must be a valid calendar date`); |
| 37 | } |
| 38 | return value; |
| 39 | } |
| 40 | |
| 41 | function formatShanghaiDate(date) { |
| 42 | const parts = new Intl.DateTimeFormat('en-CA', { |
no test coverage detected