рдореИрдВрдиреЗ WithChunkReading рдФрд░ рдмреИрдЪ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдирдпрд╛ рдЖрдпрд╛рдд рдмрдирд╛рдпрд╛ред рдореИрдВ рдЬрд┐рд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдЖрдпрд╛рддрдХ рджрд┐рдирд╛рдВрдХ рдХреЙрд▓рдо рдХреЛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк) 43257.0.0.1 рд╣реИред рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдирд┐рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдмрд╣реБрдд рдкреБрд░рд╛рдирд╛ рдзрд╛рдЧрд╛ рдорд┐рд▓рд╛ https://github.com/Maatwebsite/Laravel-Excel/issues/404 рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕реЗ рддрдп рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд╕реЗ рдПрдХ vendor/maatwebsite/excel/src/Jobs/ReadChunk.php
рдкрд░ рдЙрдкрд▓рдмреНрдз рд░реАрдбрдЪрдВрдХ рд╡рд░реНрдЧ рдореЗрдВ рдЧрд▓рдд рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд░рд╣рд╛ рдерд╛ред $this->reader->setReadDataOnly(true);
рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЕрднреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЬрдм рд╣рдо рдХрдВрдкреЛрдЬрд╝рд░ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ рддреЛ рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЪрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░:
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рддрд╛рд░реАрдЦ рдЕрдкрд▓реЛрдб рдХрд░реЗрдЧрд╛ред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░:
рдкреБрд╕реНрддрдХрд╛рд▓рдп рджрд┐рдирд╛рдВрдХ рдХреЛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЗрд╕рдХрд╛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдорд╛рдирдХрд░)
рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдЖрдпрд╛рдд рд╡рд░реНрдЧ рд╣реИ,
` рдиреЗрдорд╕реНрдкреЗрд╕ рдРрдк \ рдЖрдпрд╛рдд;
рдРрдк \ рдирдореВрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
Maatwebsite\Excel\Concerns\ToModel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
Maatwebsite\Excel\Concerns\WithBatchInserts рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
Maatwebsite\Excel\Concerns\WithChunkReading рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
Maatwebsite\Excel\Concerns\WithHeadingRow рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
Maatwebsite\Excel\Imports\HeadingRowFormatter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
HeadingRowFormatter :: рдбрд┐рдлрд╝реЙрд▓реНрдЯ ('рдХреЛрдИ рдирд╣реАрдВ');
рд╡рд░реНрдЧ рдирдореВрдирд╛ ToModel, WithHeadingRow, WithBatchInserts, WithChunkReading рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ
{
public function model(array $row)
{
return new user([
'UserName' => $row['UserName'],
'Password' => $row['Password'],
'date' => $row['date'],
]);
}
public function batchSize(): int
{
return 1000;
}
public function chunkSize(): int
{
return 1000;
}
}`
рдЕрдирдЪрд╛рд╣реЗ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ:
return new user([
'UserName' => $row['UserName'],
'Password' => $row['Password'],
'date' => \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row['date']),
]);
рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ setReadDataOnly
рдХреБрдЫ рдЕрдиреНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реВрдБред рд╢рд╛рдпрдж рд╣рдо рдЗрд╕реЗ рдПрдХ рдСрдкреНрдЯ-рдЗрди рдЪрд┐рдВрддрд╛ рдпрд╛ рдХреБрдЫ рдФрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ред excelToDateTimeObject
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд┐рдерд┐ рдХреЛ рд╡рд╛рдкрд╕ рд▓рд╛рдпрд╛ рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЪрд┐рдВрддрд╛ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╢рд╛рдпрдж рдХреБрдЫ рдРрд╕рд╛:
interface WithDateObjects
{
/**
* An array of columns to convert to DateTime Objects.
* Either named column headers or coordinate columns.
*
* <strong i="8">@return</strong> array
*/
public function dateColumns(): array;
}
class MyImport implements WithDateObjects
{
public function dateColumns(): array
{
return ['birthday', 'wedding_date'];
}
}
рдлрд┐рд░ рд▓рд╛рд░рд╡реЗрд▓ рдПрдХреНрд╕реЗрд▓ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЖрдпрд╛рдд рд╡рд┐рдердбреЗрдЯрдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($this->cell->getValue())
рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ?
рдкреБрдирд╢реНрдЪ: рдХреНрдпрд╛ рдЗрд╕реЗ рдХрд╛рд░реНрдмрди рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдореИрдВ рдПрдХ рдкреАрдЖрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ WithDates
рдЪрд┐рдВрддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ Carbon
рддрд┐рдерд┐рдпрд╛рдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ;)
рдареАрдХ рд╣реИ, рдореБрдЭреЗ рднреА рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА рд╣реИ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдм рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ unexpected data found
рдорд┐рд▓реА рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЬрдм рдореИрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ
\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row['date'])
рдФрд░ рдЕрднреА рднреА рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА
A non well formed numeric value encountered
рдЗрд╕реЗ рдХрд╛рд░реНрдмрди рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ
рдЖрдкрдХрд╛ $row['date']
рддрдм рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдирд╣реАрдВ рд╣реИред excelToDateTimeObject
рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рджрд┐рдирд╛рдВрдХ рдХреЛ рдПрдХреНрд╕реЗрд▓ рдореЗрдВ рджрд┐рдирд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдореНрдо рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд┐рдирд╛рдВрдХ рдХреЛ рд╕реНрд╡рд░реВрдкрд┐рдд рд╣реИ
рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ "maatwebsite/excel": "^3.1",
рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рд╣реИ $row['data']
ред
рдореИрдВ WithDates
рд╕рд╛рде рдПрдХ рдкреАрдЖрд░ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕рдкреНрддрд╛рд╣ рд╣реЛрдЧрд╛ред рдореИрдВ рдПрдХ рд╕рдореНрдореЗрд▓рди рдореЗрдВ рд╣реВрдВ рдФрд░ рдЕрднреА рдЙрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рдпрд╣ 1/1/18
рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХреНрд╕реЗрд▓ рддрд┐рдерд┐ рд╕реЗ MySQL рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореИрдВ рдкрд╣рд▓реЗ рдЗрд╕ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдЕрднреА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ ... рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ
рдпрджрд┐ рдЖрдк 1/1/18
рд╡рд╛рдкрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдирд╣реАрдВ рд╣реИ :) рддреЛ рдЖрдкрдХреЛ excelToDateTimeObject
рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЛ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП Carbon::createFromFormat(...)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
@patrickbrouwers рд╢рд╛рдпрдж рдбреЗрдЯреНрд╕ рдХреА рдЪрд┐рдВрддрд╛ рдкрд╣рд▓реЗ excelToDateTimeObject рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреА рд╣реИ рдФрд░ рдпрджрд┐ рд╡рд╣ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ рддреЛ рдХрд╛рд░реНрдмрди :: createFromFormat() рдЖрдЬрд╝рдорд╛рдПрдВред рджрд┐рдирд╛рдВрдХ рдХреЙрд▓рдо рд╡рд┐рдзрд┐ рджрд┐рдирд╛рдВрдХ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред
public function dateColumns(): array
{
return ['birthday' => тАШd/m/YтАЩ, 'wedding_date'];
}
Ps: рдореИрдВрдиреЗ рдЗрд╕ рдХреЛрдб рдХреЛ рдЕрдкрдиреЗ рдлреЛрди рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдореИрдВ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрддрд╛ рдХрд┐ рдмреИрдХ рдЯрд┐рдХ рдХреИрд╕реЗ рдХрд░реЗрдВ
@devinfd рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ :)
рдкреАрдПрд╕ рдиреЗ рдЖрдкрдХреА рдкрд┐рдЫрд▓реА рдЯрд┐рдХ рддрдп рдХреА;)
@devinfd рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдХрд┐рддрдиреА рджреВрд░ рд╣реИрдВ? рд░реБрдЪрд┐ рднреА рд╣реЛрдЧреАред
рдореИрдВрдиреЗ рдПрдХ рдкреАрдЖрд░ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рд╣реА рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЬрдЯрд┐рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред @patrickbrouwers рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдбрдмреЗрд╕ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЖрдЧреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕ рдмреАрдЪ рдореИрдВ рдЕрдкрдиреА рдЖрдпрд╛рдд рд╡рд╕реНрддреБ рдкрд░ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
/**
* Transform a date value into a Carbon object.
*
* <strong i="8">@return</strong> \Carbon\Carbon|null
*/
public function transformDate($value, $format = 'Y-m-d')
{
try {
return \Carbon\Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($value));
} catch (\ErrorException $e) {
return \Carbon\Carbon::createFromFormat($format, $value);
}
}
class Sample implements ToModel
{
public function model(array $row)
{
return new user([
'name' => $row[0],
'email' => $row[1],
'birth-date' => $this->transformDate($row[2]),
]);
}
}
рдЗрд╕рдХреЗ рд╕рд╛рде рднреА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред
@devinfd
рдореИрдВ рдЕрдкрдиреА рддрд┐рдерд┐ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИ 1943-10-15 00:00:00
рдХреНрдпрд╛ рд╡реИрд╕реЗ рднреА рдореИрдВ рдЗрд╕реЗ 10/15/1943
рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
рдпрд╛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрд╡рд░реВрдкрдг рдХреЛ рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рдкрд░ рд╕рдВрднрд╛рд▓рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛?
рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ, рдХреНрдпрд╛ рдХреЛрдИ рдЪрд╛рд╣рддрд╛ рд╣реИ/рдЙрдореНрдореАрдж/рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ .... рджрд┐рдирд╛рдВрдХ рдлрд╝реАрд▓реНрдб рдЗрди рдЕрдЬреАрдм рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рди рдЖрдпрд╛рдд рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдРрд╕реЗ рдкрд░рд┐рджреГрд╢реНрдп рдХреА рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдЬрд╣рд╛рдВ рдПрдХ рддрд╛рд░реАрдЦ рдЬреЛ рдПрдХреНрд╕реЗрд▓ рдореЗрдВ "2019-01-10" рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реЛ, рдореЗрд░реЗ рдкрд╛рд╕ 43473.0 рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдП
@nickpoulos рдпрд╣ рд╣реИ рдХрд┐ рдПрдХреНрд╕реЗрд▓ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ рдЬрдм
PhpSpreadsheet рдЗрд╕реЗ рдбреЗрдЯрд╛рдЯрд╛рдЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреА рд╣реИ, NumberFormat рд▓рд╛рдЗрди 649 рджреЗрдЦреЗрдВред рдпрджрд┐ рд╡рд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдЖрдк рдХреИрд╕реЗ рдорд╛рдиреНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рддрд┐рдерд┐ рдЦрд╛рд▓реА рдЖрддреА рд╣реИ?
рдЗрдореНрдкреЛрд░реНрдЯ рдПрдХреНрд╕реЗрд▓ рдлрд╛рдЗрд▓ рдкрд░ рдХреЛрдИ рднреА рдкреНрд░реЛрдЧреНрд░реЗрд╕ рд╕реНрдЯреЗрдЯрд╕ рд╢реЛ рдХрд╛ рдХреЛрдб рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ ??
рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ ??
@ рдЬрдпрдХрдВрдЧрдо93
рдереЛрдбрд╝реА рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ _WithCustomValueBinder_ рдХреА рдорджрдж рд╕реЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рдирд╛рдВрдХ рдХреЙрд▓рдо рдХреЗ рд╕рдордиреНрд╡рдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рд╕реА рдЬрд╛рдВрдЪ рд▓рд┐рдЦреА рдФрд░ PhpOffice\PhpSpreadsheet\Shared\Date рдкрд░ excelToDateTimeObject рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдЕрдВрдд рдореЗрдВ рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдорд╛рди рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ред
рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:
public function bindValue(Cell $cell, $value)
{
if(preg_match('/^E*\d*$/', $cell->getCoordinate())){
$cell->setValueExplicit(Date::excelToDateTimeObject($value)->format('Y-m-d'), DataType::TYPE_STRING);
}
else{
$cell->setValueExplicit($value, DataType::TYPE_STRING);
}
return true;
}
рд╕рднреА рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдФрд░ рдЖрдпрд╛рддрдХ рдкрд░ _WithCustomValueBinder_ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред
рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдореИрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдХреБрдЫ рдХрдХреНрд╖реЛрдВ рдореЗрдВ рдХреЛрдИ рдорд╛рди (рд╕рдВрдЦреНрдпрд╛рддреНрдордХ, рд╕реНрдЯреНрд░рд┐рдВрдЧ, рджрд┐рдирд╛рдВрдХ...) рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВ рдХреИрд╕реЗ рдЬрд╛рди рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ рдЙрд╕ рдХрдХреНрд╖ рдореЗрдВ рдореВрд▓ рдорд╛рди рдПрдХ рджрд┐рдирд╛рдВрдХ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ рд╕рд╣реА рдврдВрдЧ рд╕реЗ?
рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд┐рд╕ рдХреЙрд▓рдо рдореЗрдВ рджрд┐рдирд╛рдВрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реЛрдЧреА рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЗ рдлрд┐рдХреНрд╕ рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк Headings рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк column key рд╕реЗ check рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рддрд┐рдерд┐ рдорд╛рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХреНрд╕реЗрд▓ рдХреЗ рд╕рд╛рде, рдпрд╣ рддрд╛рд░реАрдЦ рдХреЛ рдПрдХреНрд╕реЗрд▓ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред рдЖрдк рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдкрд░ рдПрдХ рдкреИрдЯрд░реНрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рдмрдирд╛рдПрдВ рдФрд░ рдпрджрд┐ рдХреЛрдИ рдореЗрд▓ рд╣реИ, рддреЛ рдЖрдк рд╕реНрд╡рд░реВрдкрдг рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдПрдХреНрд╕реЗрд▓ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЛ рдЬреЛ рджреЗрдЦрд╛ рд╣реИ рдЙрд╕рд╕реЗ рдЖрдо рддреМрд░ рдкрд░ рдкреИрдЯрд░реНрди _ \d*\.\d _ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЕрдВрдХреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдПрдХ рдмрд┐рдВрджреБ рдФрд░ рдлрд┐рд░ рджреВрд╕рд░рд╛ рдЕрдВрдХ рд╣реЛрддрд╛ рд╣реИред
рдЙрдореНрдореАрдж рд╣реИ рдХреА рд╡реЛ рдорджрдж рдХрд░рджреЗред
рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдХреЙрд▓рдо рдХреЗ рдбреЗрдЯрд╛ рдореЗрдВ рдХреЛрдИ рднреА рдорд╛рди рдкреНрд░рдХрд╛рд░ (рд╕рдВрдЦреНрдпрд╛рдПрдВ, рддрд┐рдерд┐рдпрд╛рдВ, рддрд╛рд░) рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддрд╛, рдпрд╣ рдбреЗрдЯрд╛ рдЕрдВрддрддрдГ рдПрдХ рдЬреЗрд╕рди рдлрд╝реАрд▓реНрдб рдореЗрдВ рд▓реЛрдб рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ 42434.12 рдЬреИрд╕рд╛ рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рддрд╛рд░реАрдЦ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдПрдХ рдкреАрдЖрд░ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рд╣реА рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЬрдЯрд┐рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред @patrickbrouwers рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдбрдмреЗрд╕ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЖрдЧреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕ рдмреАрдЪ рдореИрдВ рдЕрдкрдиреА рдЖрдпрд╛рдд рд╡рд╕реНрддреБ рдкрд░ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
/** * Transform a date value into a Carbon object. * * <strong i="9">@return</strong> \Carbon\Carbon|null */ public function transformDate($value, $format = 'Y-m-d') { try { return \Carbon\Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($value)); } catch (\ErrorException $e) { return \Carbon\Carbon::createFromFormat($format, $value); } }
class Sample implements ToModel { public function model(array $row) { return new user([ 'name' => $row[0], 'email' => $row[1], 'birth-date' => $this->transformDate($row[2]), ]); } }
рдЬрд╛рджреВ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж
@vin33t @patrickbrouwers
рдкрд╣рд▓реЗ рдПрдХ рдЦрд╛рд▓реА рдлрд╝реАрд▓реНрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ (рдХреЛрд╢рд┐рд╢ / рдкрдХрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ), рдЕрдиреНрдпрдерд╛ рдлрд╝рдВрдХреНрд╢рди рдЦрд╛рд▓реА рд╣реЛрдиреЗ рдкрд░ рджрд┐рдирд╛рдВрдХ 1970-01-01 рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛:
if(!strlen($value)) return null;
рд╣рд╛рдп, рдореБрдЭреЗ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛, рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
protected function formatDateExcel($date){
if (gettype($date) === 'double') {
$birthday = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($date);
return $birthday->format('n/j/Y');
}
return $date;
}
рдФрд░ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдБ
$this->formatDateExcel($row['birthday']);
рдХреЛрдИ рднреА рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ 04/04/1977
рд╕рд╛рде m/d/Y
рд╕реНрд╡рд░реВрдкрдг рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВ?
Date::excelToDateTimeObject($row['birth_date'])
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдпрд╣ рдкреНрд░рд╛рд░реВрдк рддрд░реНрдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?
рдбреЗрдореЛ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП:
'birthday' => $row['birth_date'] ? Date::excelToDateTimeObject($row['birth_date']) : null,
рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 04/04/1977
рдореБрдЭреЗ 0000-00-00....
, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдорд╣реАрдирд╛ рд╣реИ рдФрд░ рдХреМрди рд╕рд╛ рджрд┐рди рд╣реИ: man_facepalming:
рдЕрджреНрдпрддрди :
рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рдирдХрд╛ рдЬрдиреНрдорджрд┐рди 1970 рд╕реЗ рдХрдо рд╣реИ ...
рджреВрд╕рд░рд╛ рд╕рдВрдкрд╛рджрди рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╕реНрддрдВрдн рдкреНрд░рдХрд╛рд░ timestamp
рд╕реЗ dateTime
- рдорд╛рдорд▓рд╛ рдмрдВрджред
рдореИрдВ рджрд┐рдирд╛рдВрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдПрдХреНрд╕реЗрд▓ рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ 1992/03/01 рдкреНрд░рд╛рд░реВрдк 1992-03-01 рдХреЗ рдмреАрдЪ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ, рдпрд╛ рдЗрд╕реЗ рджреВрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ?
рдХреГрдкрдпрд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░реЗрдВред
рдореИрдВ рджрд┐рдирд╛рдВрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдПрдХреНрд╕реЗрд▓ рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ 1992/03/01 рдкреНрд░рд╛рд░реВрдк 1992-03-01 рдХреЗ рдмреАрдЪ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ, рдпрд╛ рдЗрд╕реЗ рджреВрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ?
рдХреГрдкрдпрд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░реЗрдВред
рд╣рд╛рдп рдирд┐рдЬрд╝рд╛рд░рджрд╛рдиреА,
рдЗрд╕ рддрд░рд╣ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЕрдкрдиреА рдПрдХреНрд╕реЗрд▓ рдлрд╝рд╛рдЗрд▓ рдкрд░ рджрд┐рдирд╛рдВрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рдХреЙрд▓рдо 1992-03-01 рдкрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред
рдпрд╣ рджрд┐рдирд╛рдВрдХ 1992-03-01 рд▓рд╛рд░рд╡реЗрд▓ рдПрдХреНрд╕реЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЙрд▓рдо рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрдкрдбреЗрдЯ/рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо :-
1) рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд▓ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВред рджрд┐рдирд╛рдВрдХ рдХреЙрд▓рдо рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рд░рд╛рдЗрдЯ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдкреНрд░рд╛рд░реВрдк рд╕реЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
2) рдлреЙрд░реНрдореЗрдЯ рд╕реЗрд▓> рдирдВрдмрд░> рдХрд╕реНрдЯрдо> рдЯрд╛рдЗрдк> dd-mm-yyyy hh:mm:ss
рдирдореВрдирд╛ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛ > 03-06-2018 00:00:00
рдлреЙрд░реНрдореЗрдЯ рд╕реЗрд▓ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рджред рдЕрдЧрд░ рдпрд╣ 03-06-2018 рдХреА рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИред
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЙрд╕ рдкрд░ рдбрдмрд▓ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ рдмрджрд▓ рдЬрд╛рдП 03-06-2018 00:00:00ред
рдлрд┐рд░ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░реЗрдВ.... рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рдХрд╛рдо рдХрд░реЗрдЧреАред
рдореИрдВ рджрд┐рдирд╛рдВрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдПрдХреНрд╕реЗрд▓ рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ 1992/03/01 рдкреНрд░рд╛рд░реВрдк 1992-03-01 рдХреЗ рдмреАрдЪ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ, рдпрд╛ рдЗрд╕реЗ рджреВрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ?
рдХреГрдкрдпрд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░реЗрдВредрд╣рд╛рдп рдирд┐рдЬрд╝рд╛рд░рджрд╛рдиреА,
рдЗрд╕ рддрд░рд╣ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЕрдкрдиреА рдПрдХреНрд╕реЗрд▓ рдлрд╝рд╛рдЗрд▓ рдкрд░ рджрд┐рдирд╛рдВрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рдХреЙрд▓рдо 1992-03-01 рдкрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред
рдпрд╣ рджрд┐рдирд╛рдВрдХ 1992-03-01 рд▓рд╛рд░рд╡реЗрд▓ рдПрдХреНрд╕реЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЙрд▓рдо рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрдкрдбреЗрдЯ/рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо :-
- рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд▓ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВред рджрд┐рдирд╛рдВрдХ рдХреЙрд▓рдо рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рд░рд╛рдЗрдЯ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдкреНрд░рд╛рд░реВрдк рд╕реЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
- рдлреЙрд░реНрдореЗрдЯ рд╕реЗрд▓> рдирдВрдмрд░> рдХрд╕реНрдЯрдо> рдЯрд╛рдЗрдк> dd-mm-yyyy hh:mm:ss
рдирдореВрдирд╛ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛ > 03-06-2018 00:00:00
рдлреЙрд░реНрдореЗрдЯ рд╕реЗрд▓ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рджред рдЕрдЧрд░ рдпрд╣ 03-06-2018 рдХреА рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИред
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЙрд╕ рдкрд░ рдбрдмрд▓ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ рдмрджрд▓ рдЬрд╛рдП 03-06-2018 00:00:00редрдлрд┐рд░ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░реЗрдВ.... рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рдХрд╛рдо рдХрд░реЗрдЧреАред
рдПрдХреНрд╕реЗрд▓ рдореЗрдВ рджрд┐рдирд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИ, рдореБрдЭреЗ рдХрд╛рд░реНрдмрди рдиреЗрд╕реНрдмреЛрдЯ рдХрд╛ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
рддреЛ рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдпрд╣ рддрдп рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╕реЗрд▓ рдХреЛ рдбреЗрдЯ рдкреНрд░рд╛рд░реВрдк рдпрд╛ рдбреЗрдЯрдЯрд╛рдЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ? рдПрдХреНрд╕реЗрд▓ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рджрд┐рдирд╛рдВрдХ рдлрд╝реАрд▓реНрдб рджрд┐рдирд╛рдВрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╕реНрдкреНрд░реЗрдбрд╢реАрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдПрдХреНрд╕реЗрд▓ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рддреЛ рдЙрд╕ рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╣рдореЗрдВ рдмрддрд╛ рд╕рдХреЗ рдХрд┐ рдпрд╣ рдПрдХ рд╕реЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рддрд╛рд░реАрдЦ рд╣реИред
рдПрдХ рддреНрд╡рд░рд┐рдд рдЭрд▓рдХ рдереА, рдФрд░ рдпрд╣ рдХрд╛рд░реНрдпрдкрддреНрд░рдХ рдореЗрдВ рд╣реИ:
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision" xmlns:xr2="http://schemas.microsoft.com/office/spreadsheetml/2015/revision2" xmlns:xr3="http://schemas.microsoft.com/office/spreadsheetml/2016/revision3" mc:Ignorable="x14ac xr xr2 xr3" xr:uid="{A7382266-55D2-4E6B-95C9-90E61705D12D}">
...
<sheetData>
<row r="4" spans="1:1" x14ac:dyDescent="0.25">
<c r="A4">
<v>54321</v>
</c>
</row>
<row r="5" spans="1:1" x14ac:dyDescent="0.25">
<c r="A5" s="1">
<v>43924</v>
</c>
</row>
</sheetData>
...
</worksheet>
рд╕реЗрд▓ A4 рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИ, рдФрд░ рд╕реЗрд▓ A5 рдПрдХ рддрд┐рдерд┐ рд╣реИред s="1"
рд╡рд┐рд╢реЗрд╖рддрд╛ рдЕрд▓рдЧ рд╣реИред рдпрд╣ рдЗрд╕реЗ рдПрдХ рддрд╛рд░реАрдЦ рдмрдирд╛рддрд╛ рд╣реИред рдпрджрд┐ рдореИрдВ рдЕрдкрдирд╛ Book1.xlsx
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рд╕реЗрд▓ A4 рдореЗрдВ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рддреЛ рд╕реНрдкреНрд░реИрдбрд╢реАрдЯ рдЦреЛрд▓рдиреЗ рд╕реЗ рдореБрдЭреЗ рджреЛ рддрд┐рдерд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВред релрекрейреирез реиреж рд╕рд┐рддрдВрдмрд░ реирежрекрео рд╣реИ, рдЕрдЧрд░ рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рдереЗ ;-)
рддреЛ рдбреЗрдЯрд╛ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░реЗрдбрд╢реАрдЯ рдореЗрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рддрд┐рдерд┐ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд▓реНрдкрдирд╛ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╕реВрдХреНрд╖реНрдорддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдкреНрд░реЗрдбрд╢реАрдЯ рдЖрдпрд╛рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рдХреНрдпрд╛ рд╣реИред
рдЕрдкрдбреЗрдЯ: рдпрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдЬрд╡рд╛рдм s=1
styles.xml
рдореЗрдВ рдХреБрдЫ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдВрддрддрдГ рдЖрдкрдХреЛ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рд╛рд░реВрдк рдпрд╛ рдПрдХ рдХрд╕реНрдЯрдо рдкреНрд░рд╛рд░реВрдк рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рд░реВрдк рдЖрдк рд╕рднреА рдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛
PhpSpreadsheet рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдПрдХреНрд╕реЗрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЛ read_only рдореЛрдб рдореЗрдВ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдВ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L47 PhpSpreadsheet рддрдм рддрд┐рдерд┐ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рддрд┐рдерд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рд╕реЗрдЯрд┐рдВрдЧ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($date)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддрд┐рдерд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЕрдирдЪрд╛рд╣реЗ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ:
return new user([ 'UserName' => $row['UserName'], 'Password' => $row['Password'], 'date' => \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row['date']), ]);
рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐
setReadDataOnly
рдХреБрдЫ рдЕрдиреНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реВрдБред рд╢рд╛рдпрдж рд╣рдо рдЗрд╕реЗ рдПрдХ рдСрдкреНрдЯ-рдЗрди рдЪрд┐рдВрддрд╛ рдпрд╛ рдХреБрдЫ рдФрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдореЗрд░реА рддрд┐рдерд┐ рдХреЛ 1900-01-08 рдореЗрдВ рдмрджрд▓ рджреЗрддреА рд╣реИ
рдпрджрд┐ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рдЯрд╛рдЗрдо рдлрд╝реАрд▓реНрдб рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦреА рд╣реИ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдХрд┐ рдорд╛рди рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рдЯрд╛рдЗрдо рд╣реИ рдпрд╛ рдирд╣реАрдВ (рдЪрд╛рд╣реЗ рдЖрдк рдЬрд╛рдирддреЗ рд╣реЛрдВ рдХрд┐ рдЙрд╕ рдХреЙрд▓рдо рдореЗрдВ рдбреЗрдЯрд╛рдЯрд╛рдЗрдо рд╣реЛрдЧрд╛ рдпрд╛ рдирд╣реАрдВ) рдпрд╛ рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
/**
* <strong i="6">@param</strong> Cell $cell
* <strong i="7">@param</strong> $value
*
* <strong i="8">@return</strong> boolean;
*/
public function bindValue(Cell $cell, $value)
{
$formatedCellValue = $this->formatDateTimeCell($value, $datetime_output_format = "d-m-Y H:i:s", $date_output_format = "d-m-Y", $time_output_format = "H:i:s" );
if($formatedCellValue != false){
$cell->setValueExplicit($formatedCellValue, DataType::TYPE_STRING);
return true;
}
// else return default behavior
return parent::bindValue($cell, $value);
}
/**
*
* Convert excel-timestamp to Php-timestamp and again to excel-timestamp to compare both compare
* By Leonardo J. Jauregui ( <strong i="9">@Nanod10</strong> | siskit dot com )
*
* <strong i="10">@param</strong> $value (cell value)
* <strong i="11">@param</strong> String $datetime_output_format
* <strong i="12">@param</strong> String $date_output_format
* <strong i="13">@param</strong> String $time_output_format
*
* <strong i="14">@return</strong> $formatedCellValue
*/
private function formatDateTimeCell( $value, $datetime_output_format = "Y-m-d H:i:s", $date_output_format = "Y-m-d", $time_output_format = "H:i:s" )
{
// is only time flag
$is_only_time = false;
// Divide Excel-timestamp to know if is Only Date, Only Time or both of them
$excel_datetime_exploded = explode(".", $value);
// if has dot, maybe date has time or is only time
if(strstr($value,".")){
// Excel-timestamp to Php-DateTimeObject
$dateTimeObject = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($value);
// if Excel-timestamp > 0 then has Date and Time
if(intval($excel_datetime_exploded[0]) > 0){
// Date and Time
$output_format = $datetime_output_format;
$is_only_time = false;
}else{
// Only time
$output_format = $time_output_format;
$is_only_time = true;
}
}else{
// Only Date
// Excel-timestamp to Php-DateTimeObject
$dateTimeObject = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($value);
$output_format = $date_output_format;
$is_only_time = false;
}
// Php-DateTimeObject to Php-timestamp
$phpTimestamp = $dateTimeObject->getTimestamp();
// Php-timestamp to Excel-timestamp
$excelTimestamp = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel( $phpTimestamp );
// if is only Time
if($is_only_time){
// 01-01-1970 = 25569
// Substract to match PhpToExcel conversion
$excelTimestamp = $excelTimestamp - 25569;
}
/*
// uncoment to debug manualy and see if working
$debug_arr = [
"value"=>$value,
"value_float"=>floatval($value),
"dateTimeObject"=>$dateTimeObject,
"phpTimestamp"=>$phpTimestamp,
"excelTimestamp"=>$excelTimestamp,
"default_date_format"=>$dateTimeObject->format('Y-m-d H:i:s'),
"custom_date_format"=>$dateTimeObject->format($output_format)
];
if($cell->getColumn()=="Q"){
if($cell->getRow()=="2"){
if(floatval($value)===$excelTimestamp){
dd($debug_arr);
}
}
}
*/
// if the values match
if( floatval($value) === $excelTimestamp ){
// is a fucking date! ;)
$formatedCellValue = $dateTimeObject->format($output_format);
return $formatedCellValue;
}else{
// return normal value
return false;
}
}
рдирдорд╕реНрддреЗред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИред рдореИрдВ ToCollection рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
рд╡рд┐рдзрд┐ public function collection(Collection $collection)
рдХреЛ рдареАрдХ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВред
рд╕рдорд╕реНрдпрд╛ : рд╕рдВрдЧреНрд░рд╣ () рд╡рд┐рдзрд┐ рдореЗрдВ, рдПрдХ рдбреЗрдЯрд╛рдЯрд╛рдЗрдо рд╕реЗрд▓ рдХреЛ рдбреЗрдЯрд╛рдЯрд╛рдЗрдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рдХреИрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░реВрдВ? рдпрд╣ рдореВрд▓реНрдп рдкреНрд░рд╛рд░реВрдк рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИред рдФрд░ рдореИрдВ рд╡реИрд╕реЗ рднреА XLS рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
class MyImport implements WithCustomValueBinder, ToCollection
- рди рддреЛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдЗрдВрдбрд╡реИрд▓реНрдпреВрдЬрд╝ рдХреЛ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ();
ToModel рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╕рдВрдЧреНрд░рд╣ () рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдФрд░ рдПрдХреНрд╕рдПрд▓рдПрд╕ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рд░реИрдЦрд┐рдХ рдирд╣реАрдВ рд╣реИред рдХрд╕реНрдЯрдо рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣реИрд▓реЛ, рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдпрд╣рд╛рдБред рдореИрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд┐рдерд┐ рдкреНрд░рд╛рд░реВрдк рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рд░реНрд╡рд╛ рдХреЗ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рджрд┐рдирд╛рдВрдХ рдлрд╝реАрд▓реНрдб рд╕реЗ рдкрд╣рд▓реЗ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рд╕рдВрднрд╡ рд╣реИ? рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдЬреЛ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдкрд╛рдпрд╛ рд╣реИ рд╡рд╣ рджрд┐рдирд╛рдВрдХ рд╕рдордп рд╕реЗрд▓ рдХреЛ xlsx рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ:
public function rules(): array
{
return [
'start' => 'required|date_format:d/m/y H:i|before:*.end',
'end' => 'required|date_format:d/m/y H:i|after:*.end',
];
}
рд╣рд╛рдВ, рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реЗрд▓ рдкреНрд░рд╛рд░реВрдк рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рдпрд╣ рдареАрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рд╣рдореЗрд╢рд╛ рдПрдХреНрд╕рдПрд▓рдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрд▓ рдкреНрд░рд╛рд░реВрдк рдбреЗрдЯреЗрдо рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдо рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдмрдиреА рд╣реБрдИ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореИрдВрдиреЗ рдПрдХ рдкреАрдЖрд░ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рд╣реА рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЬрдЯрд┐рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред @patrickbrouwers рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдбрдмреЗрд╕ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЖрдЧреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕ рдмреАрдЪ рдореИрдВ рдЕрдкрдиреА рдЖрдпрд╛рдд рд╡рд╕реНрддреБ рдкрд░ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: