Skip to content

Commit 6b7e5d9

Browse files
committed
Improve date fields auto-detection.
1 parent 2588c0a commit 6b7e5d9

File tree

2 files changed

+56
-3
lines changed

2 files changed

+56
-3
lines changed

src/Exports/DataTableQueuedExport.php

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Yajra\DataTables\Exports;
44

5+
use Carbon\Carbon;
56
use Illuminate\Support\Collection;
67
use Maatwebsite\Excel\Concerns\Exportable;
78
use Maatwebsite\Excel\Concerns\FromQuery;
@@ -49,6 +50,14 @@ public function map($row): array
4950
return Date::dateTimeToExcel($row[$property]);
5051
}
5152

53+
if ($this->wantsDateFormat($column)) {
54+
$this->dates[] = $index;
55+
56+
$dateValue = $row[$property];
57+
58+
return $dateValue ? Date::dateTimeToExcel(Carbon::parse($dateValue)) : '';
59+
}
60+
5261
return $row[$property];
5362
})
5463
->toArray();
@@ -65,8 +74,8 @@ public function columnFormats(): array
6574

6675
$this->columns
6776
->each(function (Column $column, $index) use (&$formats) {
68-
if (in_array($index, $this->dates)) {
69-
return $formats[$this->num2alpha($index - 1)] = NumberFormat::FORMAT_DATE_YYYYMMDD;
77+
if (in_array($index, $this->dates) || $this->wantsDateFormat($column)) {
78+
return $formats[$this->num2alpha($index - 1)] = $column['exportFormat'] ?? NumberFormat::FORMAT_DATE_YYYYMMDD;
7079
}
7180

7281
if (isset($column['exportFormat'])) {
@@ -86,4 +95,17 @@ protected function num2alpha($n)
8695

8796
return $r;
8897
}
98+
99+
/**
100+
* @param \Yajra\DataTables\Html\Column $column
101+
* @return bool
102+
*/
103+
protected function wantsDateFormat(Column $column): bool
104+
{
105+
if (!isset($column['exportFormat'])) {
106+
return false;
107+
}
108+
109+
return in_array($column['exportFormat'], config('datatables-export.date_formats', []));
110+
}
89111
}

src/config/datatables-export.php

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,34 @@
11
<?php
22

3-
return [];
3+
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
4+
5+
return [
6+
7+
/**
8+
* List of valid date formats to be used for auto-detection.
9+
*/
10+
'date_formats' => [
11+
'mm/dd/yyyy',
12+
NumberFormat::FORMAT_DATE_DATETIME,
13+
NumberFormat::FORMAT_DATE_YYYYMMDD,
14+
NumberFormat::FORMAT_DATE_XLSX22,
15+
NumberFormat::FORMAT_DATE_DDMMYYYY,
16+
NumberFormat::FORMAT_DATE_DMMINUS,
17+
NumberFormat::FORMAT_DATE_DMYMINUS,
18+
NumberFormat::FORMAT_DATE_DMYSLASH,
19+
NumberFormat::FORMAT_DATE_MYMINUS,
20+
NumberFormat::FORMAT_DATE_TIME1,
21+
NumberFormat::FORMAT_DATE_TIME2,
22+
NumberFormat::FORMAT_DATE_TIME3,
23+
NumberFormat::FORMAT_DATE_TIME4,
24+
NumberFormat::FORMAT_DATE_TIME5,
25+
NumberFormat::FORMAT_DATE_TIME6,
26+
NumberFormat::FORMAT_DATE_TIME7,
27+
NumberFormat::FORMAT_DATE_XLSX14,
28+
NumberFormat::FORMAT_DATE_XLSX15,
29+
NumberFormat::FORMAT_DATE_XLSX16,
30+
NumberFormat::FORMAT_DATE_XLSX17,
31+
NumberFormat::FORMAT_DATE_YYYYMMDD2,
32+
NumberFormat::FORMAT_DATE_YYYYMMDDSLASH,
33+
]
34+
];

0 commit comments

Comments
 (0)