@@ -26,10 +26,12 @@ class NumberFormat extends Supervisor
26
26
const FORMAT_DATE_DMMINUS = 'd-m ' ;
27
27
const FORMAT_DATE_MYMINUS = 'm-yy ' ;
28
28
const FORMAT_DATE_XLSX14 = 'mm-dd-yy ' ;
29
+ const FORMAT_DATE_XLSX14_ACTUAL = 'm/d/yyyy ' ;
29
30
const FORMAT_DATE_XLSX15 = 'd-mmm-yy ' ;
30
31
const FORMAT_DATE_XLSX16 = 'd-mmm ' ;
31
32
const FORMAT_DATE_XLSX17 = 'mmm-yy ' ;
32
33
const FORMAT_DATE_XLSX22 = 'm/d/yy h:mm ' ;
34
+ const FORMAT_DATE_XLSX22_ACTUAL = 'm/d/yyyy h:mm ' ;
33
35
const FORMAT_DATE_DATETIME = 'd/m/yy h:mm ' ;
34
36
const FORMAT_DATE_TIME1 = 'h:mm AM/PM ' ;
35
37
const FORMAT_DATE_TIME2 = 'h:mm:ss AM/PM ' ;
@@ -40,6 +42,7 @@ class NumberFormat extends Supervisor
40
42
const FORMAT_DATE_TIME7 = 'i:s.S ' ;
41
43
const FORMAT_DATE_TIME8 = 'h:mm:ss;@ ' ;
42
44
const FORMAT_DATE_YYYYMMDDSLASH = 'yyyy/mm/dd;@ ' ;
45
+ const FORMAT_DATE_LONG_DATE = 'dddd, mmmm d, yyyy ' ;
43
46
44
47
const DATE_TIME_OR_DATETIME_ARRAY = [
45
48
self ::FORMAT_DATE_YYYYMMDD ,
@@ -49,10 +52,12 @@ class NumberFormat extends Supervisor
49
52
self ::FORMAT_DATE_DMMINUS ,
50
53
self ::FORMAT_DATE_MYMINUS ,
51
54
self ::FORMAT_DATE_XLSX14 ,
55
+ self ::FORMAT_DATE_XLSX14_ACTUAL ,
52
56
self ::FORMAT_DATE_XLSX15 ,
53
57
self ::FORMAT_DATE_XLSX16 ,
54
58
self ::FORMAT_DATE_XLSX17 ,
55
59
self ::FORMAT_DATE_XLSX22 ,
60
+ self ::FORMAT_DATE_XLSX22_ACTUAL ,
56
61
self ::FORMAT_DATE_DATETIME ,
57
62
self ::FORMAT_DATE_TIME1 ,
58
63
self ::FORMAT_DATE_TIME2 ,
@@ -63,6 +68,7 @@ class NumberFormat extends Supervisor
63
68
self ::FORMAT_DATE_TIME7 ,
64
69
self ::FORMAT_DATE_TIME8 ,
65
70
self ::FORMAT_DATE_YYYYMMDDSLASH ,
71
+ self ::FORMAT_DATE_LONG_DATE ,
66
72
];
67
73
const TIME_OR_DATETIME_ARRAY = [
68
74
self ::FORMAT_DATE_XLSX22 ,
@@ -84,6 +90,21 @@ class NumberFormat extends Supervisor
84
90
const FORMAT_ACCOUNTING_USD = '_("$"* #,##0.00_);_("$"* \(#,##0.00\);_("$"* "-"??_);_(@_) ' ;
85
91
const FORMAT_ACCOUNTING_EUR = '_("€"* #,##0.00_);_("€"* \(#,##0.00\);_("€"* "-"??_);_(@_) ' ;
86
92
93
+ const SHORT_DATE_INDEX = 14 ;
94
+ const DATE_TIME_INDEX = 22 ;
95
+ const FORMAT_SYSDATE_X = '[$-x-sysdate] ' ;
96
+ const FORMAT_SYSDATE_F800 = '[$-F800] ' ;
97
+ const FORMAT_SYSTIME_X = '[$-x-systime] ' ;
98
+ const FORMAT_SYSTIME_F400 = '[$-F400] ' ;
99
+
100
+ protected static string $ shortDateFormat = self ::FORMAT_DATE_XLSX14_ACTUAL ;
101
+
102
+ protected static string $ longDateFormat = self ::FORMAT_DATE_LONG_DATE ;
103
+
104
+ protected static string $ dateTimeFormat = self ::FORMAT_DATE_XLSX22_ACTUAL ;
105
+
106
+ protected static string $ timeFormat = self ::FORMAT_DATE_TIME2 ;
107
+
87
108
/**
88
109
* Excel built-in number formats.
89
110
*/
@@ -178,16 +199,40 @@ public function applyFromArray(array $styleArray): static
178
199
/**
179
200
* Get Format Code.
180
201
*/
181
- public function getFormatCode (): ?string
202
+ public function getFormatCode (bool $ extended = false ): ?string
182
203
{
183
204
if ($ this ->isSupervisor ) {
184
- return $ this ->getSharedComponent ()->getFormatCode ();
205
+ return $ this ->getSharedComponent ()->getFormatCode ($ extended );
185
206
}
186
- if (is_int ($ this ->builtInFormatCode )) {
187
- return self ::builtInFormatCode ($ this ->builtInFormatCode );
207
+ $ builtin = $ this ->getBuiltInFormatCode ();
208
+ if (is_int ($ builtin )) {
209
+ if ($ extended ) {
210
+ if ($ builtin === self ::SHORT_DATE_INDEX ) {
211
+ return self ::$ shortDateFormat ;
212
+ }
213
+ if ($ builtin === self ::DATE_TIME_INDEX ) {
214
+ return self ::$ dateTimeFormat ;
215
+ }
216
+ }
217
+
218
+ return self ::builtInFormatCode ($ builtin );
188
219
}
189
220
190
- return $ this ->formatCode ;
221
+ return $ extended ? self ::convertSystemFormats ($ this ->formatCode ) : $ this ->formatCode ;
222
+ }
223
+
224
+ public static function convertSystemFormats (?string $ formatCode ): ?string
225
+ {
226
+ if (is_string ($ formatCode )) {
227
+ if (stripos ($ formatCode , self ::FORMAT_SYSDATE_F800 ) !== false || stripos ($ formatCode , self ::FORMAT_SYSDATE_X ) !== false ) {
228
+ return self ::$ longDateFormat ;
229
+ }
230
+ if (stripos ($ formatCode , self ::FORMAT_SYSTIME_F400 ) !== false || stripos ($ formatCode , self ::FORMAT_SYSTIME_X ) !== false ) {
231
+ return self ::$ timeFormat ;
232
+ }
233
+ }
234
+
235
+ return $ formatCode ;
191
236
}
192
237
193
238
/**
@@ -290,15 +335,15 @@ private static function fillBuiltInFormatCodes(): void
290
335
self ::$ builtInFormats [11 ] = '0.00E+00 ' ;
291
336
self ::$ builtInFormats [12 ] = '# ?/? ' ;
292
337
self ::$ builtInFormats [13 ] = '# ??/?? ' ;
293
- self ::$ builtInFormats [14 ] = ' m/d/yyyy ' ; // Despite ECMA 'mm-dd-yy';
294
- self ::$ builtInFormats [15 ] = ' d-mmm-yy ' ;
338
+ self ::$ builtInFormats [14 ] = self :: FORMAT_DATE_XLSX14_ACTUAL ; // Despite ECMA 'mm-dd-yy';
339
+ self ::$ builtInFormats [15 ] = self :: FORMAT_DATE_XLSX15 ;
295
340
self ::$ builtInFormats [16 ] = 'd-mmm ' ;
296
341
self ::$ builtInFormats [17 ] = 'mmm-yy ' ;
297
342
self ::$ builtInFormats [18 ] = 'h:mm AM/PM ' ;
298
343
self ::$ builtInFormats [19 ] = 'h:mm:ss AM/PM ' ;
299
344
self ::$ builtInFormats [20 ] = 'h:mm ' ;
300
345
self ::$ builtInFormats [21 ] = 'h:mm:ss ' ;
301
- self ::$ builtInFormats [22 ] = ' m/d/yyyy h:mm ' ; // Despite ECMA 'm/d/yy h:mm';
346
+ self ::$ builtInFormats [22 ] = self :: FORMAT_DATE_XLSX22_ACTUAL ; // Despite ECMA 'm/d/yy h:mm';
302
347
303
348
self ::$ builtInFormats [37 ] = '#,##0_);(#,##0) ' ; // Despite ECMA '#,##0 ;(#,##0)';
304
349
self ::$ builtInFormats [38 ] = '#,##0_);[Red](#,##0) ' ; // Despite ECMA '#,##0 ;[Red](#,##0)';
@@ -427,4 +472,44 @@ protected function exportArray1(): array
427
472
428
473
return $ exportedArray ;
429
474
}
475
+
476
+ public static function getShortDateFormat (): string
477
+ {
478
+ return self ::$ shortDateFormat ;
479
+ }
480
+
481
+ public static function setShortDateFormat (string $ shortDateFormat ): void
482
+ {
483
+ self ::$ shortDateFormat = $ shortDateFormat ;
484
+ }
485
+
486
+ public static function getLongDateFormat (): string
487
+ {
488
+ return self ::$ longDateFormat ;
489
+ }
490
+
491
+ public static function setLongDateFormat (string $ longDateFormat ): void
492
+ {
493
+ self ::$ longDateFormat = $ longDateFormat ;
494
+ }
495
+
496
+ public static function getDateTimeFormat (): string
497
+ {
498
+ return self ::$ dateTimeFormat ;
499
+ }
500
+
501
+ public static function setDateTimeFormat (string $ dateTimeFormat ): void
502
+ {
503
+ self ::$ dateTimeFormat = $ dateTimeFormat ;
504
+ }
505
+
506
+ public static function getTimeFormat (): string
507
+ {
508
+ return self ::$ timeFormat ;
509
+ }
510
+
511
+ public static function setTimeFormat (string $ timeFormat ): void
512
+ {
513
+ self ::$ timeFormat = $ timeFormat ;
514
+ }
430
515
}
0 commit comments