| Total Complexity | 2 | 
| Total Lines | 44 | 
| Duplicated Lines | 0 % | 
| Changes | 1 | ||
| Bugs | 0 | Features | 0 | 
| 1 | <?php | ||
| 12 | trait DateTrait | ||
| 13 | { | ||
| 14 | /** | ||
| 15 | * The ·lexical space· of date consists of finite-length sequences of characters of the form: | ||
| 16 | * '-'? yyyy '-' mm '-' dd zzzzzz? | ||
| 17 | * | ||
| 18 | * where the date and optional timezone are represented exactly the same way as they are for dateTime. | ||
| 19 | * The first moment of the interval is that represented by: | ||
| 20 | * '-' yyyy '-' mm '-' dd 'T00:00:00' zzzzzz? | ||
| 21 | * | ||
| 22 | * and the least upper bound of the interval is the timeline point represented (noncanonically) by: | ||
| 23 | * '-' yyyy '-' mm '-' dd 'T24:00:00' zzzzzz?. | ||
| 24 | * | ||
| 25 | * @var string | ||
| 26 | */ | ||
| 27 | private static string $date_regex = '/^ | ||
| 28 | -? | ||
| 29 |         ([1-9][0-9]*|[0-9]{4}) | ||
| 30 | - | ||
| 31 | ( | ||
| 32 | ((0(1|3|5|7|8)|1(0|2))-(0[1-9]|(1|2)[0-9]|3[0-1])) | ||
| 33 | |((0(4|6|9)|11)-(0[1-9]|(1|2)[0-9]|30)) | ||
| 34 | |(02-(0[1-9]|(1|2)[0-9])) | ||
| 35 | ) | ||
| 36 | ( | ||
| 37 | ([+-] | ||
| 38 | ([0-1][0-9]|2[0-4]) | ||
| 39 | : | ||
| 40 | (0[0-9]|[1-5][0-9]) | ||
| 41 | )|Z | ||
| 42 | )?$/Dx'; | ||
| 43 | |||
| 44 | |||
| 45 | /** | ||
| 46 | * @param string $value | ||
| 47 | * @param string $message | ||
| 48 | */ | ||
| 49 | protected static function validDate(string $value, string $message = ''): void | ||
| 59 |