投标时间不足3分钟加时

Adding time on bid placing when time less than 3 minute

我在我的产品页面上使用了一个挂钩,并添加了一个功能,可以在任何出价时增加 10 分钟(600 秒)的出价时间。

add_action( 'woocommerce_simple_auctions_outbid', 'woocommerce_simple_auctions_extend_time', 50 );
add_action( 'woocommerce_simple_auctions_proxy_outbid', 'woocommerce_simple_auctions_extend_time', 50 );
 
function woocommerce_simple_auctions_extend_time($data){
    $product = get_product( $data['product_id'] );
    if ('auction' === $product->get_type() ){
        $date1 = new DateTime($product->get_auction_dates_to());
        $date1->add(new DateInterval('PT600S'));
        update_post_meta( $data['product_id'], '_auction_dates_to', $date1->format('Y-m-d H:i:s') );
    }
}

但是当客户出价时,它会随时增加10分钟(我不希望出价时间增加到一个巨大的数字),所以我可能需要设置一个限制,这个代码只在出价时间较少时生效不到 3 分钟。

编辑:

我正在将代码更改为带有 if 验证的限制时间,但它仍然会在倒计时超过 3 分钟时添加时间:

function woocommerce_simple_auctions_extend_time($data){
    $product = get_product( $data['product_id'] );
    if ('auction' === $product->get_type() ){
        //check if time shorter than 3 min
        $date1 = new DateTime($product->get_auction_dates_to());
        $current_dt = new DateTime('NOW');
        $interval= date_diff($current_dt, $date1);
        $remaining_seconds = $interval->format("%s");
        
        if($remaining_seconds < 180) {
        // add time
        $date1->add(new DateInterval('PT600S'));
        update_post_meta( $data['product_id'], '_auction_dates_to', $date1->format('Y-m-d H:i:s') );
        }
    }
}

您可以将产品结束时间 $date1 和 运行 与当前时间的另一个日期时间对象相差,并检查差异是否小于 3 分钟。

如果少于 3 分钟,则将您的 10 分钟添加到产品的结束时间。

$current_dt = new DateTime('NOW');
$interval= date_diff($current_dt, $date1);
$remaining_seconds = $interval->format("%s");

if($remaining_seconds < 300) {
  // add time
}

PHP DateTime::diff

我使用了current_time(timestamp)来捕捉当前时间,并使用 strtotime('+5 分钟', $time) 与拍卖截止日期进行比较。

这是我可以 运行 成功的代码:

$time = current_time('timestamp' );
         $timeplus5 = date('Y-m-d H:i:s', strtotime('+5 minutes', $time));
 
         if ($timeplus5> $auctionendformat) {
             $auctionend->add(new DateInterval('PT600S'));
             update_post_meta( $data['product_id'],'_auction_dates_to', $auctionend->format('Y-m-d H:i:s') );