Laravel-excel: [BUG] problème de format de date d'importation

Créé le 14 oct. 2018  ·  38Commentaires  ·  Source: Maatwebsite/Laravel-Excel

  • [x] Capable de reproduire le comportement en dehors de votre code, le problème est isolé à Laravel Excel.
  • [x] Vérifié que votre problème n'est pas déjà classé.
  • [x] Coché si aucun PR n'a été soumis pour résoudre ce problème.

Versions

  • Version PHP : 7.1
  • Version Laravel : 5.7
  • Version du paquet : 3.1

La description

J'ai créé une nouvelle importation avec WithChunkReading et la taille du lot. Le problème auquel je suis confronté est que l'importateur convertit les colonnes de date en horodatage (je crois que son horodatage) 43257.0. après avoir investi le problème, j'ai trouvé un très vieux fil https://github.com/Maatwebsite/Laravel-Excel/issues/404 et l'une des solutions qui l'a résolu pour moi consistait à définir la valeur true sur false dans la classe ReadChunk disponible à vendor/maatwebsite/excel/src/Jobs/ReadChunk.php . la ligne est $this->reader->setReadDataOnly(true);
Cette solution fonctionne pour le moment, mais lorsque nous ferons la mise à jour du compositeur, elle disparaîtra car elle n'est pas configurable dans la bibliothèque.

Étapes pour reproduire

  1. créer excel
  2. ajouter une colonne avec n'importe quel format de date.
  3. importer excel à l'aide de l'importateur de méthode de morceaux via la bibliothèque.

Comportement prévisible:

Je m'attendrais à ce que la bibliothèque télécharge la date comme prévu.

Comportement réel :

la bibliothèque convertit la date en horodatage (en supposant son horodatage)

Information additionnelle

Voici ma classe d'importation,

` espace de noms App\Imports ;

utilisez App\Exemple ;
utilisez Maatwebsite\Excel\Concerns\ToModel ;
utilisez Maatwebsite\Excel\Concerns\WithBatchInserts ;
utilisez Maatwebsite\Excel\Concerns\WithChunkReading ;
utilisez Maatwebsite\Excel\Concerns\WithHeadingRow ;
utilisez Maatwebsite\Excel\Imports\HeadingRowFormatter ;

HeadingRowFormatter::default('aucun');

La classe Sample implémente 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

Commentaire le plus utile

J'ai commencé à travailler sur un RP mais je me suis vite rendu compte que ça allait être compliqué à mettre en place. @patrickbrouwers allait examiner la base de code pour voir quelle serait la meilleure voie à suivre.

En attendant, j'utilise simplement une méthode d'assistance sur mon objet 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]),
        ]);
    }
}

Tous les 38 commentaires

Non testé, mais je pense que vous devez faire :

 return new user([
        'UserName'           => $row['UserName'],
        'Password'           => $row['Password'],
        'date'               => \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row['date']),
    ]);

Je me souviens que setReadDataOnly causait des problèmes dans d'autres situations, donc je ne suis pas à l'aise d'ajouter cela à nouveau. Peut-être pouvons-nous en faire une préoccupation d'adhésion ou quelque chose du genre.

J'ai également connu ce problème. excelToDateTimeObject a ramené la date réelle, mais il pourrait être agréable d'avoir une préoccupation à ce sujet.

Peut-être quelque chose comme :

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

Ensuite, laravel excel détectera si l'importation implémente WithDateObjects et définira \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($this->cell->getValue()) selon les besoins ?

PS : cela doit-il se convertir en carbone ?

J'accepterais un PR qui ajoute la préoccupation WithDates qui renvoie des dates Carbon ;)

eh bien, j'ai aussi eu le problème, avant cela fonctionnait très bien et maintenant j'ai l'erreur unexpected data found , et même quand j'ajoute ceci

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

et j'ai toujours une erreur

A non well formed numeric value encountered

a également essayé de le convertir avec du carbone mais ne fonctionne pas

Votre $row['date'] n'est donc pas un entier. excelToDateTimeObject ne fonctionne que lorsque la date est formatée en tant que date dans Excel.

hmmm il est déjà formaté à la date

screen shot 2018-10-25 at 16 48 06

j'utilise "maatwebsite/excel": "^3.1",

Essayez de le déboguer, voyez ce qu'il y a dans $row['data'] .

Je peux envoyer un PR avec WithDates mais ce sera au moins une semaine. Je suis à une conférence et je ne peux pas me concentrer là-dessus pour le moment.

c'est 1/1/18 il devrait être automatiquement converti de la date Excel à la date dans la table mysql, n'est-ce pas ? j'utilise ce package auparavant et il fonctionne, il suffit de trouver... mais j'obtiens maintenant cette erreur

Si vous récupérez 1/1/18 , ce n'est clairement pas un entier :) Vous ne devriez donc pas utiliser excelToDateTimeObject . Au lieu de cela, vous devez utiliser Carbon::createFromFormat(...) pour gérer cela

@patrickbrouwers Peut-être que le problème withDates peut d'abord essayer excelToDateTimeObject et si cela lève une exception, essayez Carbon::createFromFormat(). La méthode dateColumn pourrait indiquer le format de la date.

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

Ps : j'ai essayé d'écrire ce code sur mon téléphone, je ne sais pas comment faire les ticks arrière

@devinfd Ça a l'

ps a corrigé tes tiques du dos ;)

@devinfd où en êtes-vous déjà avec la mise en œuvre ? Serait intéressé aussi.

J'ai commencé à travailler sur un RP mais je me suis vite rendu compte que ça allait être compliqué à mettre en place. @patrickbrouwers allait examiner la base de code pour voir quelle serait la meilleure voie à suivre.

En attendant, j'utilise simplement une méthode d'assistance sur mon objet 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]),
        ]);
    }
}

J'ai aussi un problème avec ça.

@devinfd
J'utilise votre fonction d'assistance pour formater ma date. Il renvoie dans ce format 1943-10-15 00:00:00

Y a-t-il de toute façon que je pourrais le retourner comme 10/15/1943 ?

Ou serait-il préférable de gérer ce type de formatage en amont ?

Je suis curieux, est-ce que quelqu'un veut/s'attend/a un cas d'utilisation pour que les champs de date reviennent sous la forme de ces entiers étranges ? Il semble que ce genre de choses devrait se produire automatiquement lors de l'importation. Je ne peux pas imaginer un scénario où une date visible dans Excel en tant que "2019-01-10" devrait me revenir sous la forme 43473.0

@nickpoulos c'est ainsi qu'Excels le stocke lorsque le format de nombre est un format de date.
PhpSpreadsheet tente de le convertir en un objet datetime, voir NumberFormat ligne 649. Si cela échoue, nous ne pouvons pas faire grand-chose.

Comment valider que la date est vide ?

N'importe qui peut afficher le code de l'affichage de l'état d'avancement, sur le fichier excel d'importation.

Quelqu'un a-t-il résolu le problème ??

Quelqu'un a-t-il résolu le problème ??

@Jaikangam93
Un peu tard, mais il m'est arrivé de le réparer à l'aide de _WithCustomValueBinder_ a écrit une petite vérification pour la colonne de coordonnées de la date et utilisé la méthode excelToDateTimeObject sur PhpOffice\PhpSpreadsheet\Shared\Date et enfin définir la valeur comme pour la cellule en tant que chaîne.

Voici le code :

   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;
    }

Assurez-vous d'importer tous les espaces de noms et d'implémenter _WithCustomValueBinder_ sur l'importateur.

J'ai un problème, j'importe un fichier qui dans certaines cellules peut avoir n'importe quelle valeur (numérique, chaîne, date...), comment puis-je savoir que la valeur d'origine dans cette cellule était une date, donc je peux la formater correctement?

Vous aurez besoin de savoir précisément quelle colonne contiendrait une entrée de date, puis de la référencer dans votre correctif. Si vous utilisez des titres, vous pouvez vérifier avec la touche de colonne. Généralement, il serait facile de déterminer une valeur de date si elle était générique, mais avec Excel, il stocke la date sous forme d'horodatage Excel qui est essentiellement une chaîne. Ce que vous pouvez faire est de trouver un modèle sur les horodatages et de vérifier en conséquence chaque colonne et s'il y a une correspondance, vous pouvez poursuivre le formatage.

D'après ce que j'ai vu, les horodatages Excel ont généralement le modèle _ \d*\.\d _ qui est un groupe de chiffres suivis d'un point, puis d'un autre chiffre.

J'espère que cela pourra aider.

Ce n'est pas possible, les données de ces colonnes peuvent avoir n'importe quel type de valeur (nombres, dates, chaînes) et je ne peux pas le savoir à l'avance, ces données sont finalement chargées dans un champ json. Et il pourrait parfaitement s'agir d'une valeur comme 42434,12 et non d'une date.

J'ai commencé à travailler sur un RP mais je me suis vite rendu compte que ça allait être compliqué à mettre en place. @patrickbrouwers allait examiner la base de code pour voir quelle serait la meilleure voie à suivre.

En attendant, j'utilise simplement une méthode d'assistance sur mon objet 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]),
        ]);
    }
}

Fonctionne comme un charme. Merci

@vin33t @patrickbrouwers
Vérifiez d'abord s'il y a un champ vide (avant try/catch), sinon la fonction renverra la date 1970-01-01 si elle est vide :

if(!strlen($value)) return null;

Salut, je trouve cette solution, fonctionne pour moi!

protected function formatDateExcel($date){ if (gettype($date) === 'double') { $birthday = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($date); return $birthday->format('n/j/Y'); } return $date; }

et j'utilise

$this->formatDateExcel($row['birthday']);

N'importe qui peut expliquer comment gérer 04/04/1977 comme dans le formatage m/d/Y ?

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

comme je le vois, il n'accepte pas l'argument de format?

à des fins de démonstration :

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

Et bien sur nous il y a 04/04/1977 Je reçois 0000-00-00.... , car il ne sait pas quel est le mois et lequel est le jour :man_facepalming:

MISE À JOUR :
Qu'à cela ne

La deuxième modification a changé le type de colonne de timestamp à dateTime - cas clos.

Je souhaite importer un fichier Excel avec le champ de date, mais j'ai une erreur entre le format 1992/03/01 étant fait 1992-03-01, ou existe-t-il un autre moyen de surmonter cela?
Merci de m'aider à surmonter ce problème.

Je souhaite importer un fichier Excel avec le champ de date, mais j'ai une erreur entre le format 1992/03/01 étant fait 1992-03-01, ou existe-t-il un autre moyen de surmonter cela?
Merci de m'aider à surmonter ce problème.

Salut nizardani,
Essayez comme ceci, sur votre fichier Excel Editez sur la colonne du champ de date 1992-03-01.
Cette date 1992-03-01 n'est pas acceptée par Laravel Excel, vous devez donc mettre à jour/modifier le type de champ de la colonne.
Étape à résoudre :-
1) Ouvrez le fichier Excel à importer. Sélectionnez la colonne de date Clic droit, sélectionnez la cellule de format
2) Format de cellule> Nombre> Personnalisé> Type> jj-mm-aaaa hh:mm:ss
L'échantillon sera comme ceci > 03-06-2018 00:00:00
Après avoir modifié la cellule Format. S'il apparaît comme 03-06-2018.
Assurez-vous de double-cliquer dessus pour qu'il devienne comme celui-ci 03-06-2018 00:00:00.

Encore une fois, importez le fichier... J'espère que cela fonctionnera maintenant.

Je souhaite importer un fichier Excel avec le champ de date, mais j'ai une erreur entre le format 1992/03/01 étant fait 1992-03-01, ou existe-t-il un autre moyen de surmonter cela?
Merci de m'aider à surmonter ce problème.

Salut nizardani,
Essayez comme ceci, sur votre fichier Excel Editez sur la colonne du champ de date 1992-03-01.
Cette date 1992-03-01 n'est pas acceptée par Laravel Excel, vous devez donc mettre à jour/modifier le type de champ de la colonne.
Étape à résoudre :-

  1. Ouvrez le fichier Excel à importer. Sélectionnez la colonne de date Clic droit, sélectionnez la cellule de format
  2. Format de cellule> Nombre> Personnalisé> Type> jj-mm-aaaa hh:mm:ss
    L'échantillon sera comme ceci > 03-06-2018 00:00:00
    Après avoir modifié la cellule Format. S'il apparaît comme 03-06-2018.
    Assurez-vous de double-cliquer dessus pour qu'il devienne comme celui-ci 03-06-2018 00:00:00.

Encore une fois, importez le fichier... J'espère que cela fonctionnera maintenant.

15788022402754767278257596482531
Je reçois à nouveau le problème après avoir modifié un type de date dans Excel, que dois-je utiliser carbone nesbot ?

Alors, quelqu'un a-t-il trouvé comment dire que la cellule est un format de date avant de décider si elle doit être convertie en objet date ou datetime ? Excel le sait évidemment, car un champ de date enregistré sera renvoyé en tant que champ de date lorsque la feuille de calcul sera à nouveau chargée dans Excel. Il doit donc y

J'ai jeté un coup d'œil rapide, et c'est dans la feuille de calcul :

<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>

La cellule A4 est un nombre entier et la cellule A5 est une date. La différence est l'attribut s="1" . Cela en fait un rendez-vous. Si j'ajoute cet attribut à la cellule A4 en modifiant mon Book1.xlsx , l'ouverture de la feuille de calcul me donne deux dates. 54321 est le 20 septembre 2048, au cas où vous vous poseriez la question ;-)

Les données sont donc dans le tableur pour informer cette bibliothèque que ce nombre n'est pas un nombre, mais une date. Je n'ai pas cherché cela dans les spécifications, donc je m'attends à ce qu'il y ait plus de subtilité que cela, mais le fait est que l'application qui importe la feuille de calcul ne devrait pas avoir à connaître à l'avance le type de données.

Mise à jour : très bonne réponse ici Le s=1 passe par quelques références de redirection dans styles.xml et vous donne finalement un format interne ou un format personnalisé. Je soupçonne que le format d'affichage est tout ce que vous avez alors pour déterminer si l'intention était que le nombre soit une date. Certains des formats internes sont assez faciles à coder en dur, mais les formats personnalisés seront un peu plus difficiles à décoder.

PhpSpreadsheet connaît ce format. Cependant, pour des raisons de performances, il est recommandé de lire le fichier Excel en mode lecture seule. Si vous pouvez désactiver cela ici : https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L47 PhpSpreadsheet devrait alors lire la date comme date automatiquement. Si vous préférez le réglage le plus performant, vous pouvez formater les dates vous-même en utilisant le PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($date)

Non testé, mais je pense que vous devez faire :

 return new user([
        'UserName'           => $row['UserName'],
        'Password'           => $row['Password'],
        'date'               => \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row['date']),
    ]);

Je me souviens que setReadDataOnly causait des problèmes dans d'autres situations, donc je ne suis pas à l'aise d'ajouter cela à nouveau. Peut-être pouvons-nous en faire une préoccupation d'adhésion ou quelque chose du genre.

Malheureusement, cette méthode change ma date en 1900-01-08

si votre besoin implique la résolution dynamique des champs datetime, j'ai écrit une méthode chargée de détecter automatiquement si la valeur est une datetime dynamiquement (que vous sachiez ou non s'il y aura une datetime dans cette colonne) ou j'ai essayé divers types de données et cela fonctionne bien

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

    }

Bonjour. J'ai le même problème. J'utilise l'interface ToCollection.

La méthode public function collection(Collection $collection) est déclarée ok et est appelée et elle a tous les traitements.

Problème : Dans la méthode collection(), une cellule datetime est convertie en nombre au lieu d'une chaîne datetime. Comment désactiver cette conversion ? Il ne comprend pas le format de valeur. Et je ne peux pas modifier le fichier XLS de toute façon.

class MyImport implements WithCustomValueBinder, ToCollection
— ne fonctionne pas non plus pour moi, car bindValues n'est pas appelé avant la collection();

ToModel je ne peux pas utiliser, comme la collection déjà implémentée (). Et le format du XLS n'est pas linéaire. Besoin d'un traitement personnalisé.

Bonjour, problème similaire ici. Je voulais utiliser le validateur de laravel pour vérifier un certain format de date et m'assurer qu'il se situe avant un autre champ de date. Est-ce possible d'une manière ou d'une autre ? La seule solution que j'ai trouvée jusqu'à présent consiste à enregistrer la cellule de date et d'heure en tant que chaîne dans le fichier xlsx et à exécuter le validateur comme ceci :

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

Oui, je change également manuellement le format de cellule en chaîne, puis l'analyse est correcte. Mais je ne peux pas toujours modifier les fichiers xls, car ils seront régulièrement diffusés au format de cellule Dateteme.

Le problème persiste toujours.

Cette page vous a été utile?
0 / 5 - 0 notes