如何使jqueryUI datepicker以不同于显示的格式提交?
我正在使用jQueryUI进行一些国际化。 我有一个DatePicker控件在正确的法语工作的窗体上。
当我select一个date,例如2012年8月15日,DatePicker将显示15Aoû,2012,如我所料。 然而,我的问题是,当表单发布时,DatePicker的值被张贴为“15Aoû,2012”,现在需要在服务器上进行翻译,才能正确保存。
我的问题是,是否有一个内置的方式在jQueryUI DatePicker中,以便我可以始终以一致的格式将其发布到服务器,而不pipe该控件显示在哪种语言中? 如果没有内置的方式,有什么办法可以实现呢?
我意识到,我可以将dateformat更改为2012年8月15日,而不是使用文本表示forms,但这不是我想要做的。
有2个configuration选项:altField和altFormat。 http://api.jqueryui.com/datepicker/#option-altField如果你指定一个altField,那个字段也会被更新,并且会有altFormat。; 通常你会想让altField成为一个隐藏的字段,那么你可以忽略常规字段并发送给db altField。
正如你会注意到,提供一个dateFormat适用于新input的date ,但它不会改变已提供给dateinput字段的value
属性。 这花了我一些时间,我不确定这个解决scheme是否理想,但这是我的情况解释和解决它的代码。 未来可能会帮助别人解决同样的问题。 在我的例子中,我使用dd/MM/yyyy
作为显示格式。
- 该页面包含任意数量的dateinput字段,这些字段可能已经或可能没有按照W3C规定的格式
yyyy-MM-dd
提供的value
属性。 - 一些浏览器将有自己的input控件来处理date。 在撰写本文时,例如Opera和Chrome。 这些应该以上述格式预期和存储date,同时根据客户端的区域设置呈现date。 您可能不希望/需要在这些浏览器中创build一个jqueryui datepicker。
- 没有内置控件来处理dateinput字段的浏览器将需要jqueryui datepicker以及“alt”,不可见字段。
- 具有
yyyy-MM-dd
格式的不可见的altinput字段必须具有原始名称和唯一的id,以使表单逻辑保持正常工作。 - 最后,显示input字段的
yyyy-MM-dd
值必须被parsing并replace为所需的对应值。
所以,这里是代码,使用Modernizr来检测客户端是否能够本地呈现dateinput字段。
if (!Modernizr.inputtypes.date) { $('input[type=date]').each(function (index, element) { /* Create a hidden clone, which will contain the actual value */ var clone = $(this).clone(); clone.insertAfter(this); clone.hide(); /* Rename the original field, used to contain the display value */ $(this).attr('id', $(this).attr('id') + '-display'); $(this).attr('name', $(this).attr('name') + '-display'); /* Create the datepicker with the desired display format and alt field */ $(this).datepicker({ dateFormat: "dd/mm/yy", altField: "#" + clone.attr("id"), altFormat: "yy-mm-dd" }); /* Finally, parse the value and change it to the display format */ if ($(this).attr('value')) { var date = $.datepicker.parseDate("yy-mm-dd", $(this).attr('value')); $(this).attr('value', $.datepicker.formatDate("dd/mm/yy", date)); } }); }
看起来有人在你之前有这个问题或类似的问题。
如果你阅读这个stackoverflow的答案 ,作者试图以一种格式显示date,并以另一种格式将数据传递给MySQL。
在这个链接的前面的答案让你设置访问所选的值作为一个variables。 现在,您只需将parseDate连接到选定的datevariables即可。
<script type="text/javascript"> $('#cal').datepicker({ dateFormat: 'dd M yy', onSelect: function(dateText, inst) { var dateAsString = dateText; //the first parameter of this function var newDateFormat = $.datepicker.parseDate('dd-mm-yyyy', dateAsString); } }); </script>
检查parseDate链接的设置和格式。
希望这可以帮助!
基本上,你不应该重新格式化date。 相反,您应该通过getDate()方法从Datepicker中读取JavaScript的Date对象。 然后,你需要把它传递给服务器。
问题是如何。 基本上,你想要的是一些常见的格式。 如果你使用JSON,答案是非常简单的,只要把date对象和JSON的stringify()函数自动格式化为ISO8601 。
正如你可能从维基百科看到的,ISO8601被devise为可靠地交换date和时间,因此这就是你应该使用的。
知道现代Web浏览器支持Date对象的toISOString()
方法可能会有帮助。
正如@ Pawel-Dyda所说,有一个
getDate()方法
var currentDate = $( ".selector" ).datepicker( "getDate" );
以下是返回的示例: Wed Jan 20 2016 00:00:00 GMT+0300.
你可以用Javascript,PHP,SQL或其他语言parsing它。
MySQLparsing实例:
select str_to_date('Wed Jan 20 2016 00:00:00 GMT+0300','%a %b %d %Y %H:%i:%s');
返回:
2016-01-20 00:00:00
<input type="text" name='fieldName' id="datepicker" value="" style="width: 100px;" /> <script type="text/javascript"> $( "#datepicker" ).datepicker( "option", "dateFormat", 'dd/mm/yy' ); $( "#datepicker" ).datepicker(); </script>