Laravel-excel: [рдмрдЧ] рдЖрдпрд╛рдд рджрд┐рдирд╛рдВрдХ рдкреНрд░рд╛рд░реВрдк рдореБрджреНрджрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 14 рдЕрдХреНрддреВре░ 2018  ┬╖  38рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Maatwebsite/Laravel-Excel

  • [x] рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рдмрд╛рд╣рд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо, рд╕рдорд╕реНрдпрд╛ Laravel Excel рд╕реЗ рдЕрд▓рдЧ рд╣реИред
  • [x] рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рдХрд┐ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рджрд░реНрдЬ рдирд╣реАрдВ рд╣реИред
  • [x] рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдкреАрдЖрд░ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред

рд╕рдВрд╕реНрдХрд░рдгреЛрдВ

  • рдкреАрдПрдЪрдкреА рд╕рдВрд╕реНрдХрд░рдг: 7.1
  • рд▓рд╛рд░рд╡реЗрд▓ рд╕рдВрд╕реНрдХрд░рдг: 5.7
  • рдкреИрдХреЗрдЬ рд╕рдВрд╕реНрдХрд░рдг: 3.1

рд╡рд┐рд╡рд░рдг

рдореИрдВрдиреЗ WithChunkReading рдФрд░ рдмреИрдЪ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдирдпрд╛ рдЖрдпрд╛рдд рдмрдирд╛рдпрд╛ред рдореИрдВ рдЬрд┐рд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдЖрдпрд╛рддрдХ рджрд┐рдирд╛рдВрдХ рдХреЙрд▓рдо рдХреЛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк) 43257.0.0.1 рд╣реИред рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдирд┐рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдмрд╣реБрдд рдкреБрд░рд╛рдирд╛ рдзрд╛рдЧрд╛ рдорд┐рд▓рд╛ https://github.com/Maatwebsite/Laravel-Excel/issues/404 рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕реЗ рддрдп рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд╕реЗ рдПрдХ vendor/maatwebsite/excel/src/Jobs/ReadChunk.php рдкрд░ рдЙрдкрд▓рдмреНрдз рд░реАрдбрдЪрдВрдХ рд╡рд░реНрдЧ рдореЗрдВ рдЧрд▓рдд рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд░рд╣рд╛ рдерд╛ред $this->reader->setReadDataOnly(true);
рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЕрднреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЬрдм рд╣рдо рдХрдВрдкреЛрдЬрд╝рд░ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ рддреЛ рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЪрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред

рдкреНрд░рдЬрдирди рдХреЗ рдЪрд░рдг

  1. рдПрдХреНрд╕реЗрд▓ рдмрдирд╛рдПрдВ
  2. рдХрд┐рд╕реА рднреА рджрд┐рдирд╛рдВрдХ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдХреЙрд▓рдо рдЬреЛрдбрд╝реЗрдВред
  3. рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрдВрдХ рд╡рд┐рдзрд┐ рдЖрдпрд╛рддрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕реЗрд▓ рдЖрдпрд╛рдд рдХрд░реЗрдВред

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░:

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рддрд╛рд░реАрдЦ рдЕрдкрд▓реЛрдб рдХрд░реЗрдЧрд╛ред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░:

рдкреБрд╕реНрддрдХрд╛рд▓рдп рджрд┐рдирд╛рдВрдХ рдХреЛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЗрд╕рдХрд╛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдорд╛рдирдХрд░)

рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА

рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдЖрдпрд╛рдд рд╡рд░реНрдЧ рд╣реИ,

` рдиреЗрдорд╕реНрдкреЗрд╕ рдРрдк \ рдЖрдпрд╛рдд;

рдРрдк \ рдирдореВрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
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;
}

}`

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВрдиреЗ рдПрдХ рдкреАрдЖрд░ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рд╣реА рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЬрдЯрд┐рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред @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]),
        ]);
    }
}

рд╕рднреА 38 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрдирдЪрд╛рд╣реЗ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ:

 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 рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рджрд┐рдирд╛рдВрдХ рдХреЛ рдПрдХреНрд╕реЗрд▓ рдореЗрдВ рджрд┐рдирд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдореНрдо рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд┐рдирд╛рдВрдХ рдХреЛ рд╕реНрд╡рд░реВрдкрд┐рдд рд╣реИ

screen shot 2018-10-25 at 16 48 06

рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ "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 рд▓рд╛рд░рд╡реЗрд▓ рдПрдХреНрд╕реЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЙрд▓рдо рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрдкрдбреЗрдЯ/рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо :-

  1. рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд▓ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВред рджрд┐рдирд╛рдВрдХ рдХреЙрд▓рдо рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рд░рд╛рдЗрдЯ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдкреНрд░рд╛рд░реВрдк рд╕реЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
  2. рдлреЙрд░реНрдореЗрдЯ рд╕реЗрд▓> рдирдВрдмрд░> рдХрд╕реНрдЯрдо> рдЯрд╛рдЗрдк> dd-mm-yyyy hh:mm:ss
    рдирдореВрдирд╛ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛ > 03-06-2018 00:00:00
    рдлреЙрд░реНрдореЗрдЯ рд╕реЗрд▓ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рджред рдЕрдЧрд░ рдпрд╣ 03-06-2018 рдХреА рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИред
    рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЙрд╕ рдкрд░ рдбрдмрд▓ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ рдмрджрд▓ рдЬрд╛рдП 03-06-2018 00:00:00ред

рдлрд┐рд░ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░реЗрдВ.... рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рдХрд╛рдо рдХрд░реЗрдЧреАред

15788022402754767278257596482531
рдПрдХреНрд╕реЗрд▓ рдореЗрдВ рджрд┐рдирд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИ, рдореБрдЭреЗ рдХрд╛рд░реНрдмрди рдиреЗрд╕реНрдмреЛрдЯ рдХрд╛ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рддреЛ рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдпрд╣ рддрдп рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╕реЗрд▓ рдХреЛ рдбреЗрдЯ рдкреНрд░рд╛рд░реВрдк рдпрд╛ рдбреЗрдЯрдЯрд╛рдЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ? рдПрдХреНрд╕реЗрд▓ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рджрд┐рдирд╛рдВрдХ рдлрд╝реАрд▓реНрдб рджрд┐рдирд╛рдВрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╕реНрдкреНрд░реЗрдбрд╢реАрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдПрдХреНрд╕реЗрд▓ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рддреЛ рдЙрд╕ рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╣рдореЗрдВ рдмрддрд╛ рд╕рдХреЗ рдХрд┐ рдпрд╣ рдПрдХ рд╕реЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рддрд╛рд░реАрдЦ рд╣реИред

рдПрдХ рддреНрд╡рд░рд┐рдд рдЭрд▓рдХ рдереА, рдФрд░ рдпрд╣ рдХрд╛рд░реНрдпрдкрддреНрд░рдХ рдореЗрдВ рд╣реИ:

<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',
        ];
    }

рд╣рд╛рдВ, рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реЗрд▓ рдкреНрд░рд╛рд░реВрдк рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рдпрд╣ рдареАрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рд╣рдореЗрд╢рд╛ рдПрдХреНрд╕рдПрд▓рдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрд▓ рдкреНрд░рд╛рд░реВрдк рдбреЗрдЯреЗрдо рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдо рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдмрдиреА рд╣реБрдИ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

alejandri picture alejandri  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pamekar picture pamekar  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

vandolphreyes picture vandolphreyes  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kertul picture kertul  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

amine8ghandi8amine picture amine8ghandi8amine  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ