3
votes

Problème de conversion de la date d'un sélecteur de date bootstrap vers un format différent

Travailler sur une application dans laquelle je capture certains champs de saisie à l'aide du sélecteur de date bootstrap. J'affiche le format au format jj / mm / aa à l'utilisateur, ce qui fonctionne bien. Sur le backend (construit en PHP Laravel), je dois le convertir au format aa-mm-jj qui est le format requis lors du stockage du champ de date dans l'API.

Dans le contrôleur lorsque je vide les données, j'obtiens 28 / 01/2019 mais quand je le convertis, j'obtiens 1970-01-01. Quel pourrait être le problème?

Balisage

public function validateDate(Request $request){   
        //dd($request->dob);

        //28/02/2019 after dd() above

        //Convert 
        $dobCv = date("Y-d-m", strtotime($request->dob));

        dd($dobCv);

        //1970-01-01 after dd() above
}

Javascript Logic (Bootstrap datpicker)

 var maxBirthdayDate = new Date();
maxBirthdayDate.setFullYear( maxBirthdayDate.getFullYear() - 18 );
maxBirthdayDate.setMonth(11,31);
$( function() {
  $( "#dob" ).datepicker({
    changeMonth: true,
    changeYear: true,
    dateFormat: 'dd/mm/yy',
    maxDate: maxBirthdayDate,
    yearRange: '1900:'+maxBirthdayDate.getFullYear(),
  });
});

Logique du contrôleur

<div class="form-line registar love {{ $errors->has('dob') ? ' has-error' : '' }}">
    <input type="text" placeholder="Date of Birth *" class="form-input dateTextBox" name="dob" id="dob" value="{{isset($user->dob) ? $user->dob : old('dob') }}" required>
</div>


1 commentaires

Veuillez publier les données envoyées à partir du formulaire et votre format attendu que la date doit être convoquée Par exemple FROM '2018 -01-31 23:32:06 '; TO: 31 janvier 2018 23:32


5 Réponses :


3
votes

Pourquoi n'utilisez-vous pas Laravel build dans Carbon

$ date = Carbon :: createFromFormat ('j / m / Y', $ date);

Ensuite, vous pouvez faire $ date-> toDateTimeString (); ou tout ce que vous voulez faire avec l'objet de date Carbon


3 commentaires

J'ai essayé et j'obtiens cette erreur (1/1) InvalidArgumentException Données inattendues trouvées. Données inattendues trouvées. Données de fin


Il semble que le format que vous fournissez n'est pas correct, vous pouvez vérifier ici comment composer le bon format php. net / manual / en / function.date.php


Votre date est-elle avec une année à 4 chiffres ou avec une année à 2 chiffres? s'il contient 2 chiffres, changez le Y majuscule en y



0
votes

Encodez-le au format json et envoyez-le au contrôleur


0 commentaires

1
votes

Vous pouvez simplement utiliser Carbon:

use Carbon\Carbon;

Et n'oubliez pas l'importation:

$dobCv = Carbon::createFromFormat('d/m/Y', $request->dob)->format('Y-m-d');


1 commentaires

, J'ai essayé votre suggestion mais j'obtiens cette erreur DateTime :: __ construct (): Impossible d'analyser la chaîne de temps (27/02/2019) à la position 0 (2): caractère inattendu , la date en cours d'adoption le 27/01/2019



0
votes

Changer le texte du type de saisie en date peut vous aider. par exemple:


0 commentaires

0
votes

Vous avez le problème car la barre oblique (/) signifie le formatage américain M / D / Y en strtotime et dans votre exemple 28/02/2019 28 est le mois. Ainsi, strtotime renvoie false . Je vous recommande d'utiliser la bibliothèque Carbon comme cela a été dit ci-dessus ou de changer / avec - si vous voulez votre chemin:

$ dobCv = date ("Y-j-m", strtotime (str_replace ('/', '-', $ request-> dob)));


0 commentaires