wordpress纯代码实现计算距开始和结束的天数

wordpress纯代码实现计算距开始和结束的天数

方法一:php纯代码实现计算距开始和结束的天数

下面是一个PHP脚本示例,‌用于计算距离展会开始和结束的天数,‌以及判断展会是否已经结束。‌此脚本假定你已经有了展会的开始日期和结束日期。‌

把代码放到显示的位置。

<?php  //wordpress纯代码实现计算距开始和结束的天数

// 展会开始和结束的日期
$startDate = '2023-10-01'; // 开始日期 可以改成自定义字段例:$startDate = get_post_meta(get_the_ID(), 'Exhibition_start_time', true); // 字段名:Exhibition_start_time
$endDate = '2023-10-07';  //结束日期 $endDate = get_post_meta(get_the_ID(), 'exhibition_end_time', true);  // 字段名:exhibition_end_time

// 当前日期
$currentDate = date('Y-m-d');

// 计算距离开始的天数
$startDiff = strtotime($startDate) - strtotime($currentDate);
$daysToStart = ceil($startDiff / (60 * 60 * 24));

// 计算距离结束的天数
$endDiff = strtotime($endDate) - strtotime($currentDate);
$daysToEnd = ceil($endDiff / (60 * 60 * 24));

// 判断展会状态
if ($daysToStart > 0) {
    echo "距离展会开始还有 {$daysToStart} 天。‌";
} elseif ($daysToEnd >= 0) {
    echo "展会正在进行中,‌距离展会结束还有 {$daysToEnd} 天。‌";
} else {
    echo "展会已结束。‌";
}

?>

在这个脚本中,‌我们首先定义了展会的开始日期和结束日期。‌然后,‌我们使用date()函数获取当前日期,‌并使用strtotime()函数将日期转换为时间戳。‌通过计算时间戳之间的差异,‌我们可以得到距离展会开始和结束的天数。‌最后,‌我们使用条件语句来判断展会的状态,‌并输出相应的信息。‌

方法二:wordpress纯代码实现计算距开始和结束的天数时间

我们可以在PHP脚本中加入具体的时间来计算距离展会开始和结束的时间(‌包括天数、‌小时、‌分钟和秒)‌。‌以下是一个更新后的脚本:‌

<?php  //wordpress纯代码实现计算距开始和结束的天数时间

// 展会开始和结束的日期时间
$startDate = get_post_meta(get_the_ID(), 'Exhibition_start_time', true);; // 开始日期 可以改成自定义字段例:$startDate = get_post_meta(get_the_ID(), 'Exhibition_start_time', true); // 字段名:Exhibition_start_time
$endDate = get_post_meta(get_the_ID(), 'exhibition_end_time', true);  //结束日期 可以改成自定义字段例:$endDate = get_post_meta(get_the_ID(), 'exhibition_end_time', true);  // 字段名:exhibition_end_time

// 当前日期时间
$currentDate = date('Y-m-d H:i:s');

// 计算距离开始的时间差
$startDiff = strtotime($startDate) - strtotime($currentDate);
$daysToStart = floor($startDiff / (60 * 60 * 24));
$hoursToStart = floor(($startDiff % (60 * 60 * 24)) / (60 * 60));
$minutesToStart = floor(($startDiff % (60 * 60)) / 60);
$secondsToStart = $startDiff % 60;

// 计算距离结束的时间差
$endDiff = strtotime($endDate) - strtotime($currentDate);
$daysToEnd = floor($endDiff / (60 * 60 * 24));
$hoursToEnd = floor(($endDiff % (60 * 60 * 24)) / (60 * 60));
$minutesToEnd = floor(($endDiff % (60 * 60)) / 60);
$secondsToEnd = $endDiff % 60;

// 判断展会状态
if ($daysToStart > 0 || $hoursToStart > 0 || $minutesToStart > 0 || $secondsToStart > 0) {
    echo "距离展会开始还有 {$daysToStart} 天 {$hoursToStart} 小时 {$minutesToStart} 分钟 {$secondsToStart} 秒。‌";
} elseif ($daysToEnd >= 0 || $hoursToEnd >= 0 || $minutesToEnd >= 0 || $secondsToEnd >= 0) {
    echo "展会正在进行中,‌距离展会结束还有 {$daysToEnd} 天 {$hoursToEnd} 小时 {$minutesToEnd} 分钟 {$secondsToEnd} 秒。‌";
} else {
    echo "展会已结束。‌";
}

?>

在这个脚本中,‌我们使用了floor()函数来确保天数、‌小时、‌分钟和秒都是整数。‌我们还使用了模运算符(‌%)‌来计算剩余的小时、‌分钟和秒。‌现在,‌脚本将输出距离展会开始和结束的具体时间,‌包括天数、‌小时、‌分钟和秒。‌如果展会已经结束,‌它将输出“展会已结束”。‌

方法三:wordpress纯代码实现计算距开始和结束的天数时间(先判断日期时间是否已经填写)

先判断展会开始和结束的日期时间是否已经被填写

<?PHP 
// 展会开始和结束的日期时间
$startDate = get_post_meta(get_the_ID(), 'Exhibition_start_time', true);
$endDate = get_post_meta(get_the_ID(), 'Exhibition_end_time', true);

// 检查展会开始和结束的日期时间是否填写
if (empty($startDate) || empty($endDate)) {
    // 如果任一日期为空,则输出提示信息
    echo "展会开始或结束日期时间未填写,请检查并补充。";
} else {
    // 如果日期时间都已填写,则继续执行其他逻辑

    // 当前日期时间
    $currentDate = date('Y-m-d H:i:s');

// 计算距离开始的时间差
$startDiff = strtotime($startDate) - strtotime($currentDate);
$daysToStart = floor($startDiff / (60 * 60 * 24));
$hoursToStart = floor(($startDiff % (60 * 60 * 24)) / (60 * 60));
$minutesToStart = floor(($startDiff % (60 * 60)) / 60);
$secondsToStart = $startDiff % 60;

// 计算距离结束的时间差
$endDiff = strtotime($endDate) - strtotime($currentDate);
$daysToEnd = floor($endDiff / (60 * 60 * 24));
$hoursToEnd = floor(($endDiff % (60 * 60 * 24)) / (60 * 60));
$minutesToEnd = floor(($endDiff % (60 * 60)) / 60);
$secondsToEnd = $endDiff % 60;

// 判断展会状态
if ($startDiff > 0) {
    // 展会还未开始
    echo "距离展会开始还有 {$daysToStart} 天 {$hoursToStart} 小时 {$minutesToStart} 分钟 {$secondsToStart} 秒。";
} elseif ($endDiff >= 0) {
    // 展会正在进行中
    echo "展会正在进行中,距离展会结束还有 {$daysToEnd} 天 {$hoursToEnd} 小时 {$minutesToEnd} 分钟 {$secondsToEnd} 秒。";
} else {
    // 展会已结束
    echo "展会已结束。";
}
}
?>

下面要WordPress添加二个自定义日期和时间字段匹配WordPress默认格式

需要在主题的functions.php文件中添加以下代码:‌

/** WordPress添加二个自定义日期和时间字段匹配WordPress默认格式 **/
// 添加自定义日期和时间元框
function add_Exhibition_start_time_meta_box() {
    add_meta_box(
        'Exhibition_start_time_meta_box',
        '自定义日期和时间',
        'render_Exhibition_start_time_meta_box',
        'post',
        'normal',
        'high'
    );
}
add_action('add_meta_boxes', 'add_Exhibition_start_time_meta_box');

// 渲染自定义日期和时间元框的内容
function render_Exhibition_start_time_meta_box($post) {
    wp_nonce_field(basename(__FILE__), 'Exhibition_start_time_nonce');
    $Exhibition_start_time = get_post_meta($post->ID, 'Exhibition_start_time', true);
    $exhibition_end_time = get_post_meta($post->ID, 'exhibition_end_time', true);
    
    // 格式化日期和时间以匹配WordPress默认格式
    $Exhibition_start_time_formatted = $Exhibition_start_time ? date('Y-m-d H:i:s', strtotime($Exhibition_start_time)) : '';
    $exhibition_end_time_formatted = $exhibition_end_time ? date('Y-m-d H:i:s', strtotime($exhibition_end_time)) : '';
    
    echo '<label for="Exhibition_start_time">开展开始日期和时间:</label>';
    echo '<input type="datetime-local" id="Exhibition_start_time" name="Exhibition_start_time" value="' . esc_attr($Exhibition_start_time_formatted) . '" />';
    echo '<label for="exhibition_end_time">展览结束日期和时间:</label>';
    echo '<input type="datetime-local" id="exhibition_end_time" name="exhibition_end_time" value="' . esc_attr($exhibition_end_time_formatted) . '" />';
}

// 保存自定义日期和时间元框的数据
function save_Exhibition_start_time_meta_box_data($post_id) {
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }
    if (!isset($_POST['Exhibition_start_time_nonce']) || !wp_verify_nonce($_POST['Exhibition_start_time_nonce'], basename(__FILE__))) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (isset($_POST['Exhibition_start_time'])) {
        $Exhibition_start_time = sanitize_text_field($_POST['Exhibition_start_time']);
        // 这里不需要再次格式化,‌因为我们已经从表单中接收了格式化的日期时间
        update_post_meta($post_id, 'Exhibition_start_time', $Exhibition_start_time);
    }
    if (isset($_POST['exhibition_end_time'])) {
        $exhibition_end_time = sanitize_text_field($_POST['exhibition_end_time']);
        // 这里同样不需要再次格式化
        update_post_meta($post_id, 'exhibition_end_time', $exhibition_end_time);
    }
}
add_action('save_post', 'save_Exhibition_start_time_meta_box_data');