我不知道为什么它在显示时会这样修改数据,但您可以使用
$post->post_date_gmt
这将返回与DB中相同的计划发布日期,但它是GMT时间格式,因此您可能需要先将时间转换为本地时区(
this blog post may help). 否则,如果您只是使用日期,则应该能够按原样使用它(&A);不是时间,但这取决于你在用它做什么。
Edit 2/29/12:
我想详细说明我的答案,使之更完整,并给你一些你可以实际使用的东西。
没错,发布日期存储在post_date
数据库中的字段。
例如,wordpress在wp-admin/includes/meta-boxes.php
要设置用于显示将来计划的草稿的投递日期的变量,请执行以下操作:
$date = date_i18n( $datef, strtotime( $post->post_date ) );
然而,当在前端使用相同的代码显示时,它会像您所说的那样返回当前时间。我认为我们可以得出结论
$post
正在为前端准备不同的对象数据。
无论如何,可以输出您在管理中设置的相同计划日期。
因为我们似乎无法使用$post->post_date
, 我们可以使用$post->post_date_gmt
正如我之前所说的,唯一的缺点是你的时区可能与GMT不一样。所以你所需要做的就是提取GMT值并将其转换为你的时区。
您可以将此函数添加到functions.php
无论你想在哪里叫它:
<?php
/**
*@param string $datef (optional) to pass the format you want for the returned date string
*@return string
*/
function get_the_real_post_date($datef = \'M j, Y @ G:i\') {
global $post;
if ( !empty( $timezone_string = get_option( \'timezone_string\' ) ) ) {
$timezone_object = timezone_open( $timezone_string );
$datetime_object = date_create( $post->post_date_gmt );
$offset_sec = round( timezone_offset_get( $timezone_object, $datetime_object ) );
// if you want $offset_hrs = round( $offset_sec / 3600 );
return date_i18n( $datef, strtotime( $post->post_date_gmt ) + $offset_sec );
} elseif (!empty( $offset_hrs = get_option(\'gmt_offset\') ) ) {
// this option shows empty for me so I believe it\'s only used by WP pre 3.0
// the option stores an integer value for the time offset in hours
$offset_sec = $offset_hrs * 3600;
return date_i18n( $datef, strtotime( $post->post_date_gmt ) + $offset_sec );
} else {
return; // shouldn\'t happen but...
}
}
当然,如果存在最常用的特定格式,您也可以更改参数定义中定义的默认时间格式。
如果这对你有用,请告诉我。我很好奇,你用这个日期干什么?