首先,您需要停止将日期存储在D d.m
格式,查询将无法基于该数据进行排序。
正如wyrfel所指出的,您需要使用alternate field选项来拥有两个字段,一个显示漂亮的(或您选择的)日期格式,另一个保存您存储在DB中的值(以查询可以正确排序的格式,如yy-mm-dd
).
根据你发布的一行代码,试一试。。
PHP/HTML: (替换您发布的代码)
<?php
$date_valid = false;
if( isset( $_POST[$result->field_name] ) ) {
$date_parts = explode( \'-\', $_POST[$result->field_name] );
$date_valid = ( 3 == count( $date_parts ) )
// Validate date - checkdate returns true/false
? checkdate( $date_parts[1], $date_parts[2], $date_parts[0] )
: false;
}
$display_date = ( $date_valid ) ? date( \'D d.m\', strtotime( implode( \'-\', $date_parts ) ) ) : \'\';
$storage_date = ( $date_valid ) ? $_POST[$result->field_name] : \'\';
$req = $result->field_req ? \' required\' : \'\';
?>
<input type="text" value="<?php echo $display_date; ?>" class="datepicker<?php echo $req ?>" />
<input name="<?php echo $result->field_name; ?>" type="hidden" value="<?php echo $storage_date; ?>" class="date_alternate" />
Datepicker jQuery: (只需从中提取所需内容)
jQuery(function($) {
$( ".datepicker" ).datepicker({
dateFormat: \'D d.m\',
altField: ".date_alternate",
altFormat: "yy-mm-dd"
});
});
这样你所有的日期都会存储在
yy-mm-dd
格式,但用户可以在中看到日期
D d.m
.
我在本地测试了这种方法,并能够获得所需的功能,下面是我的主题选项页面的一些截图,使用了日期字段和您选择的日期格式(我的代码显然与上面的略有不同,但方法是相同的)。
Selecting a date:
当前值位于“实时获取”部分的底部。
What you see after clicking a date in the calendar:
Visual and stored values:
我想看到代码付诸实践可能会很好,希望能有所帮助:)