首先,永远不要用你喜欢的格式存储日期。仅以数据库喜欢的格式存储日期。对于MySQL,格式为YYYY-MM-DD
让我们编写一个简短的函数将日期转换为MySQL格式:
function date2mysql( $date ) {
$timestamp = strtotime( $date );
return ( false === $timestamp ) ?
false : date( \'Y-m-d\', $timestamp );
}
此函数将返回用MySQL格式格式化的日期。如果给定日期不是有效日期(例如“16.Hugo 2013”),则函数返回
false
.
我希望您具有将数据存储在数据库中的功能。这可能看起来像这样:
function save_event( $data ) {
$defaults = array(
\'date\' => \'01. January 1970\',
\'event\' => \'Sample event\'
);
$data = wp_parse_args( $data, $defaults );
/*
* some code that store your data in the database
*/
}
在将数据存储到数据库中之前,必须将日期转换为正确的格式:
[...]
$data = wp_parse_args( $data, $defaults );
$date = date2mysql( $data[\'date\'] );
// handle cases where the date could not be converted. here setup a default date
if ( false === $date )
$date = \'1970-01-01\';
$data[\'date\'] = $date;
[...]
如果查询数据库,帖子现在将按正确的方式排序,但显示错误。您还需要从MySQL格式向后转换为人类可读的格式。WordPress有一个内置功能:
function display_data() {
$events = query_posts(
\'post_type=myevents&meta_key=_datepicker&orderby=meta_value&order=ASC&showposts=20\'
);
$dateformat = get_option( \'date_format\' );
echo \'<table>\';
echo \'<thead><th><td>Date</td><td>Event</td></th></thead>\';
echo \'<tbody>\';
foreach ( $events as $single_event ) {
printf(
\'<th><td>%s</td><td>%s</td></th>\',
mysql2date( $dateformat, $single_event[\'date\'],
$single_event[\'event\']
);
}
echo \'</tbody></table>\';
}
mysql2date() 使用给定的格式字符串格式化日期(本例中为WP选项中的日期格式)。
摘要:在数据库中存储日期之前,请将其转换为MySQL格式。仅在显示时将其转换回其他格式。在对数据进行排序或对数据执行其他操作之前,请勿对其进行转换。