mirror of
https://github.com/gorules/zen.git
synced 2026-10-04 08:02:28 +00:00
* feat: declared dates as date values - graph format:date/date-time inputs and policy date properties arrive as dates that keep their original text for output, string() and string functions - d() keeps the instant of offset/Z strings, resolves DST gaps and accepts ISO forms without offset, compact, slash-separated, YYYY-MM and YYYY - dates compare with date strings in ==, !=, <, >, in and contains, and concatenate with strings; deprecated date helpers accept dates - string(date), type() reports date, and date-to-string at string inputs * fix: close review gaps in date inputs - parse new date formats by exact shape; keep master formats first and guard DST-gap and extreme-year overflows - text-carrying dates act as strings for object keys, in-object, index, slice, concatenation and bool - deprecated helpers fall back to the date instant; time() accepts dates - schema-less child inputs receive date text; dates satisfy string parameters and slicing in the type checker - convert policy input before validation so dates are parsed once; share rewrite helpers between graph and policy conversion * fix: align date text, unions, references and child inputs - every valid date exposes a text form (original or RFC3339), so string functions and slicing on computed dates match the type checker - date and string types merge to string; reference ids typed as dates resolve through their text - input nodes convert declared dates and hand every other converted date back as its original text, following combinators only for structure - date format checks no longer allocate
14 KiB
14 KiB
| 1 | expression (string);input (json 5);output (json 5) |
|---|---|
| 2 | # Date function basics |
| 3 | d('2023-10-15');;'2023-10-15T00:00:00Z' |
| 4 | d('2023-10-15 14:30');;'2023-10-15T14:30:00Z' |
| 5 | d('2023-10-15 14:30:45');;'2023-10-15T14:30:45Z' |
| 6 | d('2023-10-15', 'Europe/Berlin');;'2023-10-15T00:00:00+02:00' |
| 7 | d('2023-10-15 14:30', 'Europe/Berlin');;'2023-10-15T14:30:00+02:00' |
| 8 | d('2023-10-15 14:30:45', 'Europe/Berlin');;'2023-10-15T14:30:45+02:00' |
| 9 | d('Europe/Berlin').isValid() and d('Europe/Berlin').isToday();;true |
| 10 | # ISO 8601 forms |
| 11 | d('2023-10-15T14:30');;'2023-10-15T14:30:00Z' |
| 12 | d('2023-10-15T14:30:45');;'2023-10-15T14:30:45Z' |
| 13 | d('2023-10-15T14:30:45.123').format('%Y-%m-%d %H:%M:%S%.3f');;'2023-10-15 14:30:45.123' |
| 14 | d('2023-10-15 14:30:45.5').format('%Y-%m-%d %H:%M:%S%.3f');;'2023-10-15 14:30:45.500' |
| 15 | d('2023-10-15T14:30Z');;'2023-10-15T14:30:00Z' |
| 16 | d('20231015T143045Z');;'2023-10-15T14:30:45Z' |
| 17 | d('20231015T1430');;'2023-10-15T14:30:00Z' |
| 18 | d('20231015');;'2023-10-15T00:00:00Z' |
| 19 | d('2023/10/15');;'2023-10-15T00:00:00Z' |
| 20 | d('2023/10/15 14:30');;'2023-10-15T14:30:00Z' |
| 21 | d('2023-10');;'2023-10-01T00:00:00Z' |
| 22 | d('2023');;'2023-01-01T00:00:00Z' |
| 23 | d('2023-10-15T14:30', 'Europe/Berlin');;'2023-10-15T14:30:00+02:00' |
| 24 | d('2023-13').isValid();;false |
| 25 | d('2023-02-30').isValid();;false |
| 26 | d('12345').isValid();;false |
| 27 | d('202310').isValid();;false |
| 28 | d('hello').isValid();;false |
| 29 | d('2023105').isValid();;false |
| 30 | d('2023011').isValid();;false |
| 31 | d('2023101T1430').isValid();;false |
| 32 | d('2023 1015').isValid();;false |
| 33 | d('+2023-1').isValid();;false |
| 34 | d('2023/1/5 1:2').isValid();;false |
| 35 | d('2023-10-15T14:30:45 Z').isValid();;false |
| 36 | d('-262143-01-01T00:00:00Z').isValid();;false |
| 37 | d('-262143-01-01', 'Asia/Tokyo').isValid();;false |
| 38 | # Offsets keep the instant |
| 39 | d('2023-10-15T14:30+0200');;'2023-10-15T12:30:00Z' |
| 40 | d('2023-10-15T14:30:45-0530');;'2023-10-15T20:00:45Z' |
| 41 | d('2023-10-15T14:30:45+02');;'2023-10-15T12:30:45Z' |
| 42 | d('2023-10-15T14:30:00+05:00');;'2023-10-15T09:30:00Z' |
| 43 | d('2023-10-15T14:30:00+05:00').hour();;9 |
| 44 | d('2023-10-15T14:30:00+05:00', 'Europe/Berlin');;'2023-10-15T11:30:00+02:00' |
| 45 | d(d('2023-10-15T12:00:00Z'), 'Europe/Berlin');;'2023-10-15T14:00:00+02:00' |
| 46 | d('2023-10-15T14:30:00+05:00') == d('2023-10-15T09:30:00Z');;true |
| 47 | # Local times inside a DST gap move forward by the gap |
| 48 | d('2024-03-31 02:30', 'Europe/Berlin');;'2024-03-31T03:30:00+02:00' |
| 49 | d('2024-03-31T02:30:00Z', 'Europe/Berlin');;'2024-03-31T04:30:00+02:00' |
| 50 | # Dates compared with strings |
| 51 | d('2023-10-15') == '2023-10-15';;true |
| 52 | '2023-10-15' == d('2023-10-15');;true |
| 53 | d('2023-10-15') == '2023-10-16';;false |
| 54 | d('2023-10-15') != '2023-10-15';;false |
| 55 | d('2023-10-15') > '2023-10-14';;true |
| 56 | '2023-10-14' < d('2023-10-15');;true |
| 57 | d('2023-10-15') in ['2023-10-14', '2023-10-15'];;true |
| 58 | '2023-10-15' in [d('2023-10-15')];;true |
| 59 | contains([d('2023-10-15')], '2023-10-15');;true |
| 60 | string(d('2023-10-15'));;'2023-10-15T00:00:00Z' |
| 61 | 'on ' + d('2023-10-15');;'on 2023-10-15T00:00:00Z' |
| 62 | year(d('2023-10-15'));;2023 |
| 63 | # Date manipulation |
| 64 | d('2023-10-15').add('1d');;'2023-10-16T00:00:00Z' |
| 65 | d('2023-10-15').add('1d 5h');;'2023-10-16T05:00:00Z' |
| 66 | d('2023-10-15').add(1, 'd');;'2023-10-16T00:00:00Z' |
| 67 | d('2023-10-15').sub('2d');;'2023-10-13T00:00:00Z' |
| 68 | d('2023-10-15').sub(1, 'M');;'2023-09-15T00:00:00Z' |
| 69 | # Date comparisons |
| 70 | d('2023-10-15').isBefore(d('2023-10-16'));;true |
| 71 | d('2023-10-15').isBefore(d('2023-10-15'));;false |
| 72 | d('2023-10-15').isAfter(d('2023-10-14'));;true |
| 73 | d('2023-10-15').isAfter(d('2023-10-15'));;false |
| 74 | d('2023-10-15').isSame(d('2023-10-15'));;true |
| 75 | d('2023-10-15').isSame(d('2023-10-16'));;false |
| 76 | d('2023-10-15').isSameOrBefore(d('2023-10-15'));;true |
| 77 | d('2023-10-15').isSameOrBefore(d('2023-10-16'));;true |
| 78 | d('2023-10-15').isSameOrBefore(d('2023-10-14'));;false |
| 79 | d('2023-10-15').isSameOrAfter(d('2023-10-15'));;true |
| 80 | d('2023-10-15').isSameOrAfter(d('2023-10-14'));;true |
| 81 | d('2023-10-15').isSameOrAfter(d('2023-10-16'));;false |
| 82 | d('2025-02-01').isAfter(d('2025-01-05'), 'year');;false |
| 83 | d('2025-02-01').isAfter(d('2024-12-31'), 'year');;true |
| 84 | d('2025-02-01').isBefore(d('2025-03-01'), 'year');;false |
| 85 | d('2025-02-01').isBefore(d('2026-01-01'), 'year');;true |
| 86 | d('2025-02-01').isSame(d('2025-12-31'), 'year');;true |
| 87 | d('2025-02-01').isSame(d('2026-01-01'), 'year');;false |
| 88 | d('2025-02-15').isAfter(d('2025-01-05'), 'month');;true |
| 89 | d('2025-02-15').isAfter(d('2025-02-05'), 'month');;false |
| 90 | d('2025-02-15').isBefore(d('2025-03-01'), 'month');;true |
| 91 | d('2025-02-15').isBefore(d('2025-02-28'), 'month');;false |
| 92 | d('2025-02-15').isSame(d('2025-02-28'), 'month');;true |
| 93 | d('2025-02-15').isSame(d('2025-03-01'), 'month');;false |
| 94 | d('2025-04-15').isAfter(d('2025-01-01'), 'quarter');;true |
| 95 | d('2025-02-15').isAfter(d('2025-03-31'), 'quarter');;false |
| 96 | d('2025-02-15').isBefore(d('2025-04-01'), 'quarter');;true |
| 97 | d('2025-02-15').isBefore(d('2025-03-31'), 'quarter');;false |
| 98 | d('2025-02-15').isSame(d('2025-03-15'), 'quarter');;true |
| 99 | d('2025-02-15').isSame(d('2025-04-01'), 'quarter');;false |
| 100 | d('2025-02-15').isAfter(d('2025-02-14'), 'day');;true |
| 101 | d('2025-02-15').isAfter(d('2025-02-15'), 'day');;false |
| 102 | d('2025-02-15').isBefore(d('2025-02-16'), 'day');;true |
| 103 | d('2025-02-15').isBefore(d('2025-02-15'), 'day');;false |
| 104 | d('2025-02-15').isSame(d('2025-02-15 12:00:00'), 'day');;true |
| 105 | d('2025-02-15').isSame(d('2025-02-16'), 'day');;false |
| 106 | # Date getters |
| 107 | d('2023-10-15').year();;2023 |
| 108 | d('2023-10-15').month();;10 |
| 109 | d('2023-10-15').day();;15 |
| 110 | d('2023-10-15').weekday();;7 |
| 111 | d('2023-10-16').weekday();;1 |
| 112 | d('2023-10-15').hour();;0 |
| 113 | d('2023-10-15').minute();;0 |
| 114 | d('2023-10-15').second();;0 |
| 115 | d('2023-10-15').dayOfYear();;288 |
| 116 | d('2023-01-01').dayOfYear();;1 |
| 117 | d('2023-12-31').dayOfYear();;365 |
| 118 | d('2024-12-31').dayOfYear();;366 |
| 119 | d('2023-10-15').quarter();;4 |
| 120 | d('2023-01-15').quarter();;1 |
| 121 | d('2023-04-15').quarter();;2 |
| 122 | d('2023-07-15').quarter();;3 |
| 123 | d('2023-10-15').timestamp();;1697328000000 |
| 124 | d('2023-10-15', 'Europe/Berlin').offsetName();;'Europe/Berlin' |
| 125 | d('2023-10-15', 'America/Los_Angeles').offsetName();;'America/Los_Angeles' |
| 126 | d('2023-10-15').isLeapYear();;false |
| 127 | d('2024-10-15').isLeapYear();;true |
| 128 | d('2000-10-15').isLeapYear();;true |
| 129 | d('1900-10-15').isLeapYear();;false |
| 130 | # Date setters |
| 131 | d('2023-10-15').set('year', 2024);;'2024-10-15T00:00:00Z' |
| 132 | d('2023-10-15').set('month', 5);;'2023-05-15T00:00:00Z' |
| 133 | d('2023-10-15').set('day', 20);;'2023-10-20T00:00:00Z' |
| 134 | d('2023-10-15T10:30:00Z').set('hour', 15);;'2023-10-15T15:30:00Z' |
| 135 | d('2023-10-15T10:30:00Z').set('minute', 45);;'2023-10-15T10:45:00Z' |
| 136 | d('2023-10-15T10:30:00Z').set('second', 30);;'2023-10-15T10:30:30Z' |
| 137 | # Special date checks |
| 138 | d().isSame(d(), 'day');;true |
| 139 | d('2023-10-15').startOf('day');;'2023-10-15T00:00:00Z' |
| 140 | d('2023-10-15T10:30:45Z').startOf('hour');;'2023-10-15T10:00:00Z' |
| 141 | d('2023-10-15').endOf('day');;'2023-10-15T23:59:59Z' |
| 142 | d('2023-10-15T10:30:45Z').endOf('hour');;'2023-10-15T10:59:59Z' |
| 143 | d('2023-10-15').startOf('month');;'2023-10-01T00:00:00Z' |
| 144 | d('2023-10-15').endOf('month');;'2023-10-31T23:59:59Z' |
| 145 | d('2023-10-15').startOf('year');;'2023-01-01T00:00:00Z' |
| 146 | d('2023-10-15').endOf('year');;'2023-12-31T23:59:59Z' |
| 147 | d('2023-10-15').startOf('week');;'2023-10-09T00:00:00Z' |
| 148 | d('2023-10-15').endOf('week');;'2023-10-15T23:59:59Z' |
| 149 | d('2024-01-15').startOf('week');;'2024-01-15T00:00:00Z' |
| 150 | d('2024-01-15').endOf('week');;'2024-01-21T23:59:59Z' |
| 151 | d('2024-01-16').endOf('week');;'2024-01-21T23:59:59Z' |
| 152 | d('2024-01-21').endOf('week');;'2024-01-21T23:59:59Z' |
| 153 | d('2023-10-15').startOf('quarter');;'2023-10-01T00:00:00Z' |
| 154 | d('2023-10-15').endOf('quarter');;'2023-12-31T23:59:59Z' |
| 155 | d('2023-03-15').startOf('quarter');;'2023-01-01T00:00:00Z' |
| 156 | d('2023-03-15').endOf('quarter');;'2023-03-31T23:59:59Z' |
| 157 | d('2023-06-15').startOf('quarter');;'2023-04-01T00:00:00Z' |
| 158 | d('2023-06-15').endOf('quarter');;'2023-06-30T23:59:59Z' |
| 159 | d('2023-09-15').startOf('quarter');;'2023-07-01T00:00:00Z' |
| 160 | d('2023-09-15').endOf('quarter');;'2023-09-30T23:59:59Z' |
| 161 | # Timezone operations |
| 162 | d('2023-10-15T00:00:00Z').tz('America/New_York');;'2023-10-14T20:00:00-04:00' |
| 163 | d('2023-10-15T00:00:00Z').tz('Europe/London');;'2023-10-15T01:00:00+01:00' |
| 164 | d('2023-10-15T00:00:00+00:00').tz('UTC');;'2023-10-15T00:00:00Z' |
| 165 | d('2023-10-15T12:00:00+02:00', 'Etc/GMT-2').tz('UTC');;'2023-10-15T10:00:00Z' |
| 166 | # Relative date methods |
| 167 | d().sub(1, 'd').isYesterday();;true |
| 168 | d().add(1, 'd').isTomorrow();;true |
| 169 | d('2023-10-15').isToday();;false |
| 170 | # Diff |
| 171 | d('2023-10-15').diff(d('2023-10-10'), 'day');;5 |
| 172 | d('2023-10-15T10:00:00Z').diff(d('2023-10-15T08:30:00Z'), 'hour');;1 |
| 173 | d('2023-10-15').diff(d('2023-09-15'), 'month');;1 |
| 174 | d('2023-12-31').diff(d('2023-01-01'), 'year');;0 |
| 175 | d('2023-12-31').diff(d('2022-01-01'), 'year');;1 |
| 176 | d('2023-10-10').diff(d('2023-10-15'), 'day');;-5 |
| 177 | d('2023-09-15').diff(d('2023-10-15'), 'month');;-1 |
| 178 | d('2022-01-01').diff(d('2023-12-31'), 'year');;-1 |
| 179 | d('2023-10-15T10:30:00Z').diff(d('2023-10-15T10:00:00Z'), 'minute');;30 |
| 180 | d('2023-10-15T10:00:30Z').diff(d('2023-10-15T10:00:00Z'), 'second');;30 |
| 181 | d('2023-10-22').diff(d('2023-10-15'), 'week');;1 |
| 182 | d('2023-10-29').diff(d('2023-10-15'), 'week');;2 |
| 183 | d('2023-07-01').diff(d('2023-01-01'), 'quarter');;2 |
| 184 | d('2023-12-31').diff(d('2023-01-01'), 'quarter');;3 |
| 185 | d('2023-10-15').diff(d('2023-10-15'), 'day');;0 |
| 186 | d('2023-10-15').diff(d('2023-10-15'), 'month');;0 |
| 187 | d('2023-10-15').diff(d('2023-10-15'), 'year');;0 |
| 188 | d('2023-03-31').diff(d('2023-02-28'), 'month');;1 |
| 189 | d('2024-02-29').diff(d('2024-01-31'), 'month');;1 |
| 190 | d('2023-05-31').diff(d('2023-04-30'), 'month');;1 |
| 191 | d('2023-03-31').diff(d('2023-02-28'), 'month');;1 |
| 192 | d('2023-02-28').diff(d('2023-01-31'), 'month');;1 |
| 193 | d('2023-04-30').diff(d('2023-03-31'), 'month');;1 |
| 194 | d('2024-02-29').diff(d('2023-02-28'), 'year');;1 |
| 195 | d('2023-12-31').diff(d('2023-01-01'), 'year');;0 |
| 196 | d('2024-01-01').diff(d('2023-01-01'), 'year');;1 |
| 197 | d('2025-01-01').diff(d('2020-01-01'), 'year');;5 |
| 198 | d('2023-12-01').diff(d('2023-01-01'), 'month');;11 |
| 199 | d('2023-12-31').diff(d('2023-01-01'), 'day');;364 |
| 200 | d('2023-10-15T12:00:00Z').diff(d('2023-10-15T10:30:00Z'), 'hour');;1 |
| 201 | d('2023-10-16T12:00:00Z').diff(d('2023-10-15T18:00:00Z'), 'day');;0 |
| 202 | # Formatting |
| 203 | d('2023-10-15').format('%Y-%m-%d');;'2023-10-15' |
| 204 | d('2023-10-15').format('%Y/%m/%d');;'2023/10/15' |
| 205 | d('2023-10-15T14:30:45Z').format('%A, %B %d %Y, %H:%M:%S');;'Sunday, October 15 2023, 14:30:45' |
| 206 | d('2023-10-15T14:30:45Z').format('%a %b %d %H:%M');;'Sun Oct 15 14:30' |
| 207 | d('2023-10-15T14:30:45Z').format('Day %j of year %Y');;'Day 288 of year 2023' |
| 208 | d('2023-10-15T14:30:45.123Z').format('%H:%M:%S.%f');;'14:30:45.123000000' |
| 209 | # Date validations |
| 210 | d(null).isValid();;false |
| 211 | d('foo').isValid();;false |
| 212 | d('2023-13-01').isValid();;false |
| 213 | d('2023-02-30').isValid();;false |
| 214 | # Date comparison operators |
| 215 | d('2023-10-15') == d('2023-10-15');;true |
| 216 | d('2023-10-15') == d('2023-10-16');;false |
| 217 | d('2023-10-15') != d('2023-10-16');;true |
| 218 | d('2023-10-15') != d('2023-10-15');;false |
| 219 | d('2023-10-15') < d('2023-10-16');;true |
| 220 | d('2023-10-15') < d('2023-10-15');;false |
| 221 | d('2023-10-15') <= d('2023-10-15');;true |
| 222 | d('2023-10-16') <= d('2023-10-15');;false |
| 223 | d('2023-10-16') > d('2023-10-15');;true |
| 224 | d('2023-10-15') > d('2023-10-15');;false |
| 225 | d('2023-10-15') >= d('2023-10-15');;true |
| 226 | d('2023-10-15') >= d('2023-10-16');;false |
| 227 | # Date range operators |
| 228 | d('2023-10-15') in [d('2023-10-01')..d('2023-10-31')];;true |
| 229 | d('2023-10-01') in [d('2023-10-01')..d('2023-10-31')];;true |
| 230 | d('2023-10-31') in [d('2023-10-01')..d('2023-10-31')];;true |
| 231 | d('2023-09-30') in [d('2023-10-01')..d('2023-10-31')];;false |
| 232 | d('2023-11-01') in [d('2023-10-01')..d('2023-10-31')];;false |
| 233 | d('2023-10-15') in (d('2023-10-01')..d('2023-10-31'));;true |
| 234 | d('2023-10-01') in (d('2023-10-01')..d('2023-10-31'));;false |
| 235 | d('2023-10-31') in (d('2023-10-01')..d('2023-10-31'));;false |
| 236 | d('2023-10-02') in (d('2023-10-01')..d('2023-10-31'));;true |
| 237 | d('2023-10-30') in (d('2023-10-01')..d('2023-10-31'));;true |
| 238 | d('2023-10-15') in [d('2023-10-01')..d('2023-10-31'));;true |
| 239 | d('2023-10-01') in [d('2023-10-01')..d('2023-10-31'));;true |
| 240 | d('2023-10-31') in [d('2023-10-01')..d('2023-10-31'));;false |
| 241 | d('2023-10-30') in [d('2023-10-01')..d('2023-10-31'));;true |
| 242 | d('2023-10-15') in (d('2023-10-01')..d('2023-10-31')];;true |
| 243 | d('2023-10-01') in (d('2023-10-01')..d('2023-10-31')];;false |
| 244 | d('2023-10-31') in (d('2023-10-01')..d('2023-10-31')];;true |
| 245 | d('2023-10-02') in (d('2023-10-01')..d('2023-10-31')];;true |
| 246 | d('2023-10-15') not in [d('2023-10-01')..d('2023-10-31')];;false |
| 247 | d('2023-09-30') not in [d('2023-10-01')..d('2023-10-31')];;true |
| 248 | d('2023-11-01') not in [d('2023-10-01')..d('2023-10-31')];;true |
| 249 | d('2023-10-01') not in (d('2023-10-01')..d('2023-10-31'));;true |
| 250 | d('2023-10-31') not in (d('2023-10-01')..d('2023-10-31'));;true |
| 251 | d('2023-10-15') not in (d('2023-10-01')..d('2023-10-31'));;false |
| 252 | d('2023-10-31') not in [d('2023-10-01')..d('2023-10-31'));;true |
| 253 | d('2023-10-01') not in (d('2023-10-01')..d('2023-10-31')];;true |
| 254 | min([d('2023-01-15'), d('2023-03-20'), d('2023-02-10')]);;'2023-01-15T00:00:00Z' |
| 255 | max([d('2023-01-15'), d('2023-03-20'), d('2023-02-10')]);;'2023-03-20T00:00:00Z' |
| 256 | min([d('2023-10-15'), d('2023-10-01'), d('2023-10-31')]);;'2023-10-01T00:00:00Z' |
| 257 | max([d('2023-10-15'), d('2023-10-01'), d('2023-10-31')]);;'2023-10-31T00:00:00Z' |
| 258 | min([d('2023-10-15T10:30:00Z'), d('2023-10-15T08:15:00Z'), d('2023-10-15T14:45:00Z')]);;'2023-10-15T08:15:00Z' |
| 259 | max([d('2023-10-15T10:30:00Z'), d('2023-10-15T08:15:00Z'), d('2023-10-15T14:45:00Z')]);;'2023-10-15T14:45:00Z' |
| 260 | min([d('2022-12-31'), d('2023-01-01'), d('2024-01-01')]);;'2022-12-31T00:00:00Z' |
| 261 | max([d('2022-12-31'), d('2023-01-01'), d('2024-01-01')]);;'2024-01-01T00:00:00Z' |
| 262 | min([d('2023-10-15'), d('2023-10-15'), d('2023-10-15')]);;'2023-10-15T00:00:00Z' |
| 263 | max([d('2023-10-15'), d('2023-10-15'), d('2023-10-15')]);;'2023-10-15T00:00:00Z' |
| 264 | min([d('2023-10-15')]);;'2023-10-15T00:00:00Z' |
| 265 | max([d('2023-10-15')]);;'2023-10-15T00:00:00Z' |
| 266 | min([d('2023-10-15T10:00:00Z'), d('2023-10-15T12:00:00Z')]);;'2023-10-15T10:00:00Z' |
| 267 | max([d('2023-10-15T10:00:00Z'), d('2023-10-15T12:00:00Z')]);;'2023-10-15T12:00:00Z' |
| 268 | min([d('1900-01-01'), d('2000-01-01'), d('1950-06-15')]);;'1900-01-01T00:00:00Z' |
| 269 | max([d('1900-01-01'), d('2000-01-01'), d('1950-06-15')]);;'2000-01-01T00:00:00Z' |
| 270 | min([d('2024-02-29'), d('2023-02-28'), d('2024-03-01')]);;'2023-02-28T00:00:00Z' |
| 271 | max([d('2024-02-29'), d('2023-02-28'), d('2024-03-01')]);;'2024-03-01T00:00:00Z' |
| 272 | min([d('2023-01-31'), d('2023-02-28'), d('2023-03-31')]);;'2023-01-31T00:00:00Z' |
| 273 | max([d('2023-01-31'), d('2023-02-28'), d('2023-03-31')]);;'2023-03-31T00:00:00Z' |
| 274 | min([d('2023-10-15').add(1, 'd'), d('2023-10-15').sub(1, 'd'), d('2023-10-15')]);;'2023-10-14T00:00:00Z' |
| 275 | max([d('2023-10-15').add(1, 'd'), d('2023-10-15').sub(1, 'd'), d('2023-10-15')]);;'2023-10-16T00:00:00Z' |
| 276 | min([d('2023-01-01'), d('2023-12-31')]).isBefore(d('2023-06-01'));;true |
| 277 | max([d('2023-01-01'), d('2023-12-31')]).isAfter(d('2023-06-01'));;true |