Dans ma vue formulaire, j'utilise le sélecteur de démarrage bootstrap

<input type="text" value="" placeholder="select date you want to send" class="form-control" name="send_date" id="datetimepicker" />

<script>

$.datetimepicker.setLocale('<%= session[:locale] %>');

$('#datetimepicker').datetimepicker({
minDate: 0,
dayOfWeekStart : 1,
lang:'<%= session[:locale] %>',
startDate: '-0m',
format:'d-m-Y H:i:s',
});
</script>

Dans mon contrôleur SMS:

    def send_sms
       message = params[:message]
       number = params[:number]
       send_date = params[:send_date]

       format = "%Y-%m-%d %H:%M:%S UTC"
       send_date = DateTime.strptime(send_date, format)

       SendSmsTimeJob.set(wait_until: send_date).perform_later(number, message)

        flash[:success] = "mesaj gitti"
        redirect_to current_user 
    end

Lorsque je soumets le formulaire, il est dit:

ArgumentError in SmsController#send_sms
invalid date

Je pense que ce problème est que je ne peux pas convertir la valeur d'entrée en valeur de temps rubis? Comment puis-je surmonter cela?

2
Yunus Hatipoglu 7 mars 2016 à 15:22

3 réponses

Meilleure réponse

Changez votre format en ceci.

format = "%d-%m-%Y %H:%M:%S"
3
Rubysmith 7 mars 2016 à 12:33

Dans votre sélecteur de date, vous formatez votre date en format:'d-m-Y H:i:s', ce qui signifie jours-mois-années

Dans votre code rubis, vous le analysez différemment:

format = "%Y-%m-%d %H:%M:%S UTC"

Vous avez d'abord inversé l'ordre des dates: année-mois-jours. Ensuite, vous ajoutez une autre valeur attendue «UTC» qui n'est pas incluse dans la chaîne que vous essayez d'analyser.

Changez votre format en format = "%d-%m-%Y %H:%M:%S" comme suggéré par Rubysmith

1
Milan Köpke 7 mars 2016 à 12:48

Vous pouvez essayer Date.parse params[:send_date] à la place.

0
Bruno Vieira Costa 7 mars 2016 à 12:37