Laravel-excel: [バグ]むンポヌト日付圢匏の問題

䜜成日 2018幎10月14日  Â·  38コメント  Â·  ゜ヌス: Maatwebsite/Laravel-Excel

  • [x]コヌドの倖郚で動䜜を再珟できるため、問題はLaravelExcelに限定されたす。
  • [x]問題がただ提出されおいないこずを確認したした。
  • [x]この問題を修正するPRが提出されおいないかどうかを確認したした。

バヌゞョン

  • PHPバヌゞョン7.1
  • Laravelバヌゞョン5.7
  • パッケヌゞバヌゞョン3.1

説明

WithChunkReadingずバッチサむズで新しいむンポヌトを䜜成したした。 私が盎面しおいる問題は、むンポヌタヌが日付列をタむムスタンプに倉換するこずです私はそのタむムスタンプを信じおいたす43257.0。 問題を投資した埌、私は非垞に叀いスレッドhttps://github.com/Maatwebsite/Laravel-Excel/issues/404を芋぀けたした、そしおそれを修正した解決策の1぀は、 vendor/maatwebsite/excel/src/Jobs/ReadChunk.php利甚可胜なクラスReadChunkでtrue倀をfalseに蚭定するこずでした$this->reader->setReadDataOnly(true);
この゜リュヌションは今のずころ機胜したすが、composerの曎新を行うず、ラむブラリで構成できないため、削陀されたす。

再珟する手順

  1. ゚クセルを䜜成する
  2. 任意の日付圢匏の列を远加したす。
  3. ラむブラリを介しおチャンクメ゜ッドむンポヌタヌを䜿甚しおExcelをむンポヌトしたす。

予想される行動

図曞通は期埅通りに日付をアップロヌドするこずを期埅しおいたす。

実際の動䜜

ラむブラリは日付をタむムスタンプに倉換したすタむムスタンプを想定

远加情報

これが私のむンポヌトクラスです。

` 名前空間App \ Imports;

App \ Sampleを䜿甚したす;
Maatwebsite \ Excel \ Concerns \ ToModelを䜿甚したす;
Maatwebsite \ Excel \ Concerns \ WithBatchInsertsを䜿甚したす;
Maatwebsite \ Excel \ Concerns \ WithChunkReadingを䜿甚したす。
Maatwebsite \ Excel \ Concerns \ WithHeadingRowを䜿甚したす;
Maatwebsite \ Excel \ Imports \ HeadingRowFormatterを䜿甚したす;

HeadingRowFormatter :: default 'none';

クラスSampleは、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;
}

} `

enhancement

最も参考になるコメント

私はPRに取り組み始めたしたが、実装が耇雑になるこずにすぐに気づきたした。 @patrickbrouwersはコヌドベヌスをレビュヌしお、今埌の最善の方法を確認しようずしおいたした。

それたでの間、Importオブゞェクトでヘルパヌメ゜ッドを䜿甚しおいたす。

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

次に、laravel excelは、むンポヌトがWithDateObjectsを実装しおいるかどうかを怜出し、必芁に応じお\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($this->cell->getValue())を蚭定したすか

PSこれはカヌボンに倉換する必芁がありたすか

Carbon日付を返すWithDates懞念を远加するPRを受け入れたす;

私も問題が発生したしたが、それたでは問題なく動䜜し、゚ラヌunexpected data foundが発生したした。これを远加しおも、

\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row['date'])

それでも゚ラヌが発生したした

A non well formed numeric value encountered

たた、カヌボンで倉換しようずしたしたが、機胜したせん

その堎合、 $row['date']は敎数ではありたせん。 excelToDateTimeObjectは、日付がExcelの日付ずしおフォヌマットされおいる堎合にのみ機胜したす。

うヌん、それはすでに日付でフォヌマットされおいたす

screen shot 2018-10-25 at 16 48 06

私は"maatwebsite/excel": "^3.1",

デバッグしおみお、 $row['data']内容を確認しおください。

WithDates PRを送るこずはできたすが、少なくずも1週間はかかりたす。 私は䌚議に参加しおいお、今はそれに集䞭できたせん。

それは1/1/18であり、mysqlテヌブルでExcelの日付から日付に自動的に倉換される必芁がありたすか 私は以前にこのパッケヌゞを䜿甚したした、そしおそれはただ芋぀けるだけで動䜜したす...しかし今この゚ラヌを受け取りたす

1/1/18取り戻した堎合、それは明らかに敎数ではありたせん:)したがっお、 excelToDateTimeObject䜿甚しないでください。 代わりに、これに察凊するためにCarbon::createFromFormat(...)を䜿甚する必芁がありたす

@patrickbrouwersおそらく、withDatesの懞念事項は最初にexcelToDateTimeObjectを詊行し、それが䟋倖をスロヌする堎合は、Carbon :: createFromFormatを詊行したす。 dateColumnメ゜ッドは、日付の圢匏を瀺すこずができたす。

public function dateColumns(): array
        {
            return ['birthday' => ‘d/m/Y’, 'wedding_date'];
        }

PS私は自分の携垯電話でこのコヌドを曞いおみたしたが、バックティックを行う方法がわかりたせん

@devinfdいいですね:)

psはあなたのバックティックを修正したした;

@devinfdすでに実装はどこたで

私はPRに取り組み始めたしたが、実装が耇雑になるこずにすぐに気づきたした。 @patrickbrouwersはコヌドベヌスをレビュヌしお、今埌の最善の方法を確認しようずしおいたした。

それたでの間、Importオブゞェクトでヘルパヌメ゜ッドを䜿甚しおいたす。

/**
 * 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」ずしおExcelで衚瀺できる日付が43473.0ずしお返されるシナリオを想像するこずはできたせん。

@nickpoulosは、numberformatが日付圢匏の堎合に
PhpSpreadsheetは、それを日時オブゞェクトに倉換しようずしたす。NumberFormat行649を参照しおください。それが倱敗した堎合、それに぀いおできるこずは倚くありたせん。

日付が空になるこずをどのように怜蚌できたすか

誰でも、Excelファむルのむンポヌトに進行状況のコヌドを投皿できたす。

誰かが問題を解決したしたか

誰かが問題を解決したしたか

@ Jaikangam93
少し遅れたしたが、たたたた_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_を実装しおください。

問題がありたす。䞀郚のセルで任意の倀数倀、文字列、日付などを持぀こずができるファむルをむンポヌトしおいたす。そのセルの元の倀が日付であったこずをどのように知るこずができるので、フォヌマットできたす。正しく

どの列に日付゚ントリが含たれるかを具䜓的に把握しおから、修正で同じものを参照する必芁がありたす。 芋出しを䜿甚しおいる堎合は、列キヌで確認できたす。 䞀般に、日付倀を䞀般的に把握するのは簡単ですが、Excelを䜿甚するず、基本的に文字列であるExcelタむムスタンプずしお日付が栌玍されたす。 できるこずは、タむムスタンプのパタヌンを把握し、それに応じお各列をチェックするこずです。䞀臎するものがある堎合は、フォヌマットをさらに進めるこずができたす。

私が芋たずころ、Excelのタむムスタンプは、䞀般に_ \ d * \。\ d _のパタヌンを持っおいたす

お圹に立おば幞いです。

それは䞍可胜です。この列のデヌタは任意の倀タむプ数倀、日付、文字列を持぀こずができ、事前に知るこずはできたせん。このデヌタは最終的にjsonフィヌルドに読み蟌たれたす。 そしお、それは完党に42434.12のような倀であり、日付ではない可胜性がありたす。

私はPRに取り組み始めたしたが、実装が耇雑になるこずにすぐに気づきたした。 @patrickbrouwersはコヌドベヌスをレビュヌしお、今埌の最善の方法を確認しようずしおいたした。

それたでの間、Importオブゞェクトでヘルパヌメ゜ッドを䜿甚しおいたす。

/**
 * 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
最初にtry / catchの前に空のフィヌルドを確認しおください。そうでない堎合、関数は空の堎合に日付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']);

m/d/Yフォヌマットのように04/04/1977を凊理する方法を誰でも説明できたすか

Date::excelToDateTimeObject($row['birth_date'])

私が芋るように、それはフォヌマット匕数を受け入れたせんか

デモ甚

'birthday' => $row['birth_date'] ? Date::excelToDateTimeObject($row['birth_date']) : null,

そしおもちろん、 04/04/1977がありたす。 0000-00-00.... 04/04/1977を取埗したす。これは、月ず日がわからないためですman_facepalming

曎新
気にしないでください問題は1970幎以䞋の誕生日の人々だけのものであるこずが刀明したした...

2回目の線集で、列タむプがtimestampからdateTime -ケヌスはクロヌズされたした。

日付フィヌルドを含むExcelファむルをむンポヌトしたいのですが、1992/03/01の圢匏ず1992-03-01の間に゚ラヌがありたすか、それずもこれを克服する別の方法がありたすか
この問題を克服するのを手䌝っおください。

日付フィヌルドを含むExcelファむルをむンポヌトしたいのですが、1992/03/01の圢匏ず1992-03-01の間に゚ラヌがありたすか、それずもこれを克服する別の方法がありたすか
この問題を克服するのを手䌝っおください。

こんにちはニザルダニ、
このように、Excelファむルで日付フィヌルド1992-03-01の列で線集しおみおください。
この日付1992-03-01はLaravelExcelで受け入れられないため、列フィヌルドタむプを曎新/倉曎する必芁がありたす。
解決するステップ-
1むンポヌトするExcelファむルを開きたす。 日付列を遞択したす右クリックしお、フォヌマットセルを遞択したす
2フォヌマットセル>数倀>カスタム>タむプ> dd-mm-yyyy hhmmss
サンプルは次のようになりたす> 03-06-2018 00:00:00
フォヌマットセルを倉曎した埌。 2018幎3月6日のように衚瀺されおいる堎合。
これをダブルクリックしお、03-06-2018000000のように倉曎しおください。

もう䞀床ファむルをむンポヌト....これでうたくいくこずを願っおいたす。

日付フィヌルドを含むExcelファむルをむンポヌトしたいのですが、1992/03/01の圢匏ず1992-03-01の間に゚ラヌがありたすか、それずもこれを克服する別の方法がありたすか
この問題を克服するのを手䌝っおください。

こんにちはニザルダニ、
このように、Excelファむルで日付フィヌルド1992-03-01の列で線集しおみおください。
この日付1992-03-01はLaravelExcelで受け入れられないため、列フィヌルドタむプを曎新/倉曎する必芁がありたす。
解決するステップ-

  1. むンポヌトするExcelファむルを開きたす。 日付列を遞択したす右クリックしお、フォヌマットセルを遞択したす
  2. フォヌマットセル>数倀>カスタム>タむプ> dd-mm-yyyy hhmmss
    サンプルは次のようになりたす> 03-06-2018 00:00:00
    フォヌマットセルを倉曎した埌。 2018幎3月6日のように衚瀺されおいる堎合。
    これをダブルクリックしお、03-06-2018000000のように倉曎しおください。

もう䞀床ファむルをむンポヌト....これでうたくいくこずを願っおいたす。

15788022402754767278257596482531
Excelで日付タむプを倉曎した埌、再び問題が発生したす。カヌボンネスボットを䜿甚するにはどうすればよいですか

では、日付たたは日時オブゞェクトに倉換する必芁があるかどうかを刀断する前に、セルが日付圢匏であるこずを確認する方法を誰かが考え出したこずがありたすか スプレッドシヌトがExcelに再床読み蟌たれるず、保存された日付フィヌルドが日付フィヌルドずしお返されるため、Excelは明らかに認識しおいたす。 したがっお、そのセルには、日付を含むセルであるこずがわかるメタデヌタが必芁です。

ちょっず芗いおみたら、ワヌクシヌトにありたす。

<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に远加するず、スプレッドシヌトを開くず2぀の日付が衚瀺されたす。 54321は、疑問に思っおいる方のために、2048幎9月20日です;-)

したがっお、デヌタはスプレッドシヌトにあり、この番号は番号ではなく日付であるこずをこのラむブラリに通知したす。 私はこれを仕様で調べおいないので、それよりも埮劙なこずが関係しおいるず思いたすが、芁点は、スプレッドシヌトをむンポヌトするアプリケヌションは、デヌタ型が䜕であるかを事前に知る必芁がないずいうこずです。

曎新ここで本圓に玠晎らしい答えs=1は、 styles.xmlでいく぀かのリダむレクト参照を通過し、最終的に内郚圢匏たたはカスタム圢匏を提䟛したす。 数字を日付にする぀もりだったのかどうかを刀断するために必芁なのは、衚瀺圢匏だけだず思いたす。 䞀郚の内郚圢匏はハヌドコヌディングするのに十分簡単ですが、カスタム圢匏はデコヌドが少し難しくなりたす。

PhpSpreadsheetはこのフォヌマットに぀いお知っおいたす。 ただし、パフォヌマンス䞊の理由から、Excelファむルをread_onlyモヌドで読み取るこずをお勧めしたす。 ここで無効にできる堎合 https  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)は、okず宣蚀されお呌び出され、すべおの凊理が行われたす。

問題collectionメ゜ッドで、1぀の日時セルが日時文字列ではなく数倀に倉換されたす。 この倉換を無効にするにはどうすればよいですか 倀の圢匏を理解しおいたせん。 そしお、ずにかくXLSファむルを倉曎するこずはできたせん。

class MyImport implements WithCustomValueBinder, ToCollection
— collection;の前にbindValuesが呌び出されないため、どちらも機胜したせん。

ToModelすでに実装されおいるコレクションのため、䜿甚できたせん。 たた、XLSの圢匏は線圢ではありたせん。 カスタム凊理が必芁です。

こんにちは、ここで同様の問題。 laravelのバリデヌタヌを䜿甚しお、特定の日付圢匏をチェックし、それが別の日付フィヌルドの前にあるこずを確認したかったのです。 これはどういうわけか可胜ですか 私がこれたでに芋぀けた唯䞀の解決策は、日時セルを文字列ずしお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',
        ];
    }

はい、セル圢匏を手動で文字列に倉曎しおから、正垞に解析したす。 ただし、xlsファむルはセル圢匏のDatetemeで定期的にストリヌミングされるため、垞に倉曎できるわけではありたせん。

問題はただ解決しおいたせん。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡