symfony-> datepicker 问题,dateend 可以在 datestart 之前
symfony-> probleme with datepicker, dateend can be before datestart
嘿,
我打电话给你是因为我在一个小型的 symfony 项目中,而且我才刚刚起步。我已经做了预订表格,但我有一个问题,因为我的 return 日期可能早于我的出发日期,我尝试了几种方法但没有成功..我需要你的灯!
谢谢你的帮助 !!
我的控制器页面:
#Date de départ type calendrier
->add('dateStart', DateType::class, [
'label' => 'date de départ',
'widget'=>'single_text',
'required'=>true,
'invalid_message' => 'This value is not valid.',
'invalid_message_parameters' => [],
'format' => 'dd-MM-yyyy',
// prevents rendering it as type="date", to avoid HTML5 date pickers
'html5' => false,
'attr' => ['class' => 'js-datepicker','id' =>'dateStart'],
])
# Date de retour type calendrier
->add('dateEnd', DateType::class, [
'label' => 'date de retour',
'widget'=>'single_text',
'required'=>true,
'format' => 'dd-MM-yyyy',
// prevents rendering it as type="date", to avoid HTML5 date pickers
'html5' => false,
'attr' => ['class' => 'js-datepicker','id' =>'dateEnd'],
])
{% extends "base.html.twig" %}
{% block stylesheets %}
<link rel="stylesheet" href="https://code.jquery.com/ui/1.9.1/themes/ui-lightness/jquery-ui.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.3.0/css/datepicker.css">
<link rel="stylesheet" href="{{ asset('css/style.css') }}">
{% endblock %}
{% block body %}
<h3 class=" text-center py-6 col-md-12">FORMULAIRE DE RÉSERVATION
</h3>
{{ form_start(form) }}
<div class=" row w-50 mt-2 mx-auto ">
<div class="w-10 "><i class="fa fa-calendar"></i> {{ form_label(form.dateStart) }}
{{ form_widget(form.dateStart) }} </div>
<div class="w-10 mx-auto"><i class="fa fa-calendar"></i> {{ form_label(form.dateEnd) }}
{{ form_widget(form.dateEnd) }}</div>
</div>
<div class="row w-100 mt-3 justify-content-center">
{{ form_row(form.save)}}
</div>
{{ form_end(form) }}
{% endblock %}
{% block javascripts %}
{{ parent() }}
<script>
$(document).ready(function() {
$(".js-datepicker").datepicker({
clearText : 'Effacer',
yearRange : "2024:2060",
changeMonth : true,
autoclose : true,
minDate : "-0d", // pas dans le passé
changeYear : true,
updateViewDate : true,
closeText : 'Fermer',
prevText : 'Précédent',
nextText : 'Suivant',
monthNames : ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],
monthNamesShort : ['Janv.', 'Févr.', 'Mars', 'Avril', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc.'],
dayNames : ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],
dayNamesShort : ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
dayNamesMin : ['D','L','M','M','J','V','S'],
weekHeader : 'Sem.',
dateFormat : 'dd/mm/yy',
firstDay : 1,
isRTL : false,
showMonthAfterYear : false,
yearSuffix : '',
defaultDate : "+1w",
})
$("#dateStart").datepicker({
onClose: function(selectedDate) {
$("#dateEnd").datepicker("option", "minDate", selectedDate);
}
})
$("#dateEnd").datepicker({
onClose: function(selectedDate) {
$("#dateStart").datepicker("option", "maxDate", selectedDate);
}
})
})
</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<script src="https://code.jquery.com/jquery-3.5.1.js" integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://code.jquery.com/ui/1.10.3/themes/ui-lightness/jquery-ui.css" />
{% endblock %}
你究竟尝试了什么?在您的设置中提供更多详细信息会更容易帮助您。
我可以看到实现此目的的 2 种方法(未测试)
在您的 return 日期字段上添加约束“大于”:
# config/validator/validation.yaml
App\Entity\Order:
properties:
deliveryDate:
- GreaterThan: departure
https://symfony.com/doc/current/reference/constraints/GreaterThan.html#comparing-dates
- 在表单级别添加 js 验证方法和 return false if return < department
嘿, 我打电话给你是因为我在一个小型的 symfony 项目中,而且我才刚刚起步。我已经做了预订表格,但我有一个问题,因为我的 return 日期可能早于我的出发日期,我尝试了几种方法但没有成功..我需要你的灯! 谢谢你的帮助 !! 我的控制器页面:
#Date de départ type calendrier
->add('dateStart', DateType::class, [
'label' => 'date de départ',
'widget'=>'single_text',
'required'=>true,
'invalid_message' => 'This value is not valid.',
'invalid_message_parameters' => [],
'format' => 'dd-MM-yyyy',
// prevents rendering it as type="date", to avoid HTML5 date pickers
'html5' => false,
'attr' => ['class' => 'js-datepicker','id' =>'dateStart'],
])
# Date de retour type calendrier
->add('dateEnd', DateType::class, [
'label' => 'date de retour',
'widget'=>'single_text',
'required'=>true,
'format' => 'dd-MM-yyyy',
// prevents rendering it as type="date", to avoid HTML5 date pickers
'html5' => false,
'attr' => ['class' => 'js-datepicker','id' =>'dateEnd'],
])
{% extends "base.html.twig" %}
{% block stylesheets %}
<link rel="stylesheet" href="https://code.jquery.com/ui/1.9.1/themes/ui-lightness/jquery-ui.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.3.0/css/datepicker.css">
<link rel="stylesheet" href="{{ asset('css/style.css') }}">
{% endblock %}
{% block body %}
<h3 class=" text-center py-6 col-md-12">FORMULAIRE DE RÉSERVATION
</h3>
{{ form_start(form) }}
<div class=" row w-50 mt-2 mx-auto ">
<div class="w-10 "><i class="fa fa-calendar"></i> {{ form_label(form.dateStart) }}
{{ form_widget(form.dateStart) }} </div>
<div class="w-10 mx-auto"><i class="fa fa-calendar"></i> {{ form_label(form.dateEnd) }}
{{ form_widget(form.dateEnd) }}</div>
</div>
<div class="row w-100 mt-3 justify-content-center">
{{ form_row(form.save)}}
</div>
{{ form_end(form) }}
{% endblock %}
{% block javascripts %}
{{ parent() }}
<script>
$(document).ready(function() {
$(".js-datepicker").datepicker({
clearText : 'Effacer',
yearRange : "2024:2060",
changeMonth : true,
autoclose : true,
minDate : "-0d", // pas dans le passé
changeYear : true,
updateViewDate : true,
closeText : 'Fermer',
prevText : 'Précédent',
nextText : 'Suivant',
monthNames : ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],
monthNamesShort : ['Janv.', 'Févr.', 'Mars', 'Avril', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc.'],
dayNames : ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],
dayNamesShort : ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
dayNamesMin : ['D','L','M','M','J','V','S'],
weekHeader : 'Sem.',
dateFormat : 'dd/mm/yy',
firstDay : 1,
isRTL : false,
showMonthAfterYear : false,
yearSuffix : '',
defaultDate : "+1w",
})
$("#dateStart").datepicker({
onClose: function(selectedDate) {
$("#dateEnd").datepicker("option", "minDate", selectedDate);
}
})
$("#dateEnd").datepicker({
onClose: function(selectedDate) {
$("#dateStart").datepicker("option", "maxDate", selectedDate);
}
})
})
</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<script src="https://code.jquery.com/jquery-3.5.1.js" integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://code.jquery.com/ui/1.10.3/themes/ui-lightness/jquery-ui.css" />
{% endblock %}
你究竟尝试了什么?在您的设置中提供更多详细信息会更容易帮助您。
我可以看到实现此目的的 2 种方法(未测试)
在您的 return 日期字段上添加约束“大于”:
# config/validator/validation.yaml App\Entity\Order: properties: deliveryDate: - GreaterThan: departure
https://symfony.com/doc/current/reference/constraints/GreaterThan.html#comparing-dates
- 在表单级别添加 js 验证方法和 return false if return < department