bootstrap-日期选择器发送错误的日期格式

bootstrap-datepicker sends wrong date format

HTML5 (<input type="date">) 中的日期标签始终以 YYYY-MM-DD 格式发送数据,而不管用户可能使用的是什么格式。太好了,但是浏览器的默认控件通常很难看。

所以,我正在尝试使用 bootstrap-datepicker 来帮助用户选择日期。我这样启动它,它正确打开:

$('#expirationDate').datepicker({
     format: "dd.mm.yyyy"
});

不幸的是,bootstrap-datepicker 似乎以用户格式(即 DD/MM/YYYY)向服务器发送所选日期。这显然是个问题,因为用户可能有不同的偏好。

bootstrap-datepicker 是否能够以 "YYYY-MM-DD" 格式发送数据,而不考虑用户的本地格式? 对我来说,这是 "common-sense" 功能,但是我没有找到任何关于它的文档。

如果上述问题的答案是"no",能否请您推荐另一个与 Symfony 3 和 Twig 集成良好的日期选择器?

在PHP

mysql 数据库需要 Y-m-d 格式的日期格式,因此如果要在数据库中插入此日期格式,您将需要更改来自日期选择器的日期格式。

示例:

$mydate = date("Y-m-d", strtotime($_POST['date']));

$("#Date").datepicker({
    autoclose:true,
    orientation: "bottom",
    format: "dd-mm-yyyy"
})


$("#Date2").datepicker({
    autoclose:true,
    orientation: "bottom",
    format: "yyyy-mm-dd"
})

$("#Date3").datepicker({
    autoclose:true,
    orientation: "bottom",
    format: "yyyy-M-dd"
})

$("#Date4").datepicker({
    autoclose:true,
    orientation: "bottom",
    format: "dd-M-yyyy"
})


$("#Date5").datepicker({
    autoclose:true,
    orientation: "bottom",
    format: "dd/M/yyyy"
})

$("#Date6").datepicker({
    autoclose:true,
    orientation: "bottom",
    format: "yyyy/M/dd"
})
<link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.css" rel="stylesheet"/>
<link href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.6.1/css/bootstrap-datepicker3.css" rel="stylesheet"/>

<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.2/js/bootstrap.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.6.1/js/bootstrap-datepicker.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>

1) dd-mm-yyyy : <input type="text" id="Date" placeholder="01-12-2016" />
<br><br>

2) yyyy-mm-dd : <input type="text" id="Date2" placeholder="2016-12-01" />
<br><br>
3) yyyy-M-dd : <input type="text" id="Date3" placeholder="2016-Dec-01" />
<br><br>
4) dd-M-yyyy : <input type="text" id="Date4" placeholder="01-Dec-2016" />
<br><br>
5) dd/M/yyyy : <input type="text" id="Date5" placeholder="01/Dec/2016" />
<br><br>
6) yyyy/M/dd : <input type="text" id="Date6" placeholder="2016/Dec/01" />

好像没有javascript或者php处理是不行的。这很可悲,因为这是一种非常普遍的情况。

我的解决方案是使用 JQuery UI 而不是 bootstrap-datepicker。我创建了两个字段:

  • 一个隐藏字段,以 YYYY-MM-DD 格式存储日期,其值在后端处理
  • DatePicker 使用但不被后端处理的可见字段。

在第二个字段中,我使用 altField and altFormat 来填充第一个字段:

$(function () {
    $("#theDateUI").datepicker({
            dateFormat: "dd.mm.yy",
            altField: $("#theDate"),
            altFormat: "yy-mm-dd"
    });
});