• DONATE to NULLED!
    Вы можете помочь Форуму и команде, поддержать финансово.
    starwanderer - модератор этого раздела будет Вам благодарен!

Помощь Как посчитать правильно время?

Alexeina66

Мой дом здесь!
Регистрация
26 Авг 2013
Сообщения
415
Реакции
436
Добрый день.
Столкнулся с такой проблемой. Есть плагин на WP, который выдает платный доступ к контенту после покупки. В настройках плагина можно выставлять время доступа в полях - год, месяц, дни, часы, минуты.
Выставляю доступ на 1 день, покупаю доступ и получаю вместо 1 дня (24 часа) 3 часа. При разборе логики плагина выяснил, что плагин отсчитывант время от текущего времени сервера. На момент покупки время сервера 21 час. вычитает установленное время в настройках плагина 1 день (24 часа) и выдает доступ на 3 часа, что в корне неверно. В настройках WP стоит часовой пояс UTC+7. Как сделать, чтобы отсчет был с времени покупки пользователя, а не сервера?

Подсчет времени

PHP:
function wau_setup_time( $data ) {

    $time = 0;

    $time += (isset( $data['year'] ) && $data['year']) ? $data['year'] * 31104000 : 0;
    $time += (isset( $data['month'] ) && $data['month']) ? $data['month'] * 2592000 : 0;
    $time += (isset( $data['day'] ) && $data['day']) ? $data['day'] * 86400 : 0;
    $time += (isset( $data['hour'] ) && $data['hour']) ? $data['hour'] * 3600 : 0;
    $time += (isset( $data['minute'] ) && $data['minute']) ? $data['minute'] * 60 : 0;

    return $time;
}

function wau_parse_time( $time ) {

    $data = array(
        'year'     => 0,
        'month'     => 0,
        'day'     => 0,
        'hour'     => 0,
        'minute' => 0
    );

    $data['year']     = floor( $time / 31104000 );
    if ( $data['year'] < 0 )
        $data['year']     = 0;

    $sec_month         = $time - ($data['year'] * 31104000);
    $data['month']     = floor( $sec_month / 2592000 );
    if ( $data['month'] < 0 )
        $data['month']     = 0;

    $sec_day     = $sec_month - ($data['month'] * 2592000);
    $data['day'] = floor( $sec_day / 86400 );

    $sec_hour         = $sec_day - ($data['day'] * 86400);
    $data['hour']     = floor( $sec_hour / 3600 );

    $sec_min         = $sec_hour - ($data['hour'] * 3600);
    $data['minute']     = floor( $sec_min / 60 );

    return $data;
}

Выдача доступа

PHP:
function wau_add_access( $args ) {
    global $wpdb;

    if ( ! isset( $args['access_date'] ) )
        $args['access_date'] = current_time( 'mysql' );

    if ( ! $wpdb->insert( WP_PREFIX . "wau_access", $args ) )
        return false;

    $access_id = $wpdb->insert_id;

    do_action( 'wau_add_access', $access_id );

    return $access_id;
}


function wau_update_user_access( $user_id, $account_id, $access_time, $append = true ) {

    if ( $access = wau_get_user_access_by_account( $user_id, $account_id ) ) {

        if ( $append && wau_get_account_field( $account_id, 'is_prolong' ) ) {
            $access_time += $access->access_time;
        } else {
            $access_time += strtotime( current_time( 'mysql' ) ) - strtotime( $access->access_date );
        }

        $result = wau_update_access( $access->access_id, array(
            'access_time' => $access_time
            ) );

        $access_id = $access->access_id;
    } else {

        $access_id = wau_add_access( array(
            'user_id'         => $user_id,
            'account_id'     => $account_id,
            'access_time'     => $access_time
            ) );
    }

    do_action( 'wau_update_user_access', $access_id );

    return $access_id;
}

Функция покупки доступа, где $args['payment_date'] = current_time( 'mysql' ); время покупки отображает в БД по времени сервера

PHP:
function wau_add_payment( $args ) {
    global $wpdb;

    if ( ! isset( $args['payment_date'] ) )
        $args['payment_date'] = current_time( 'mysql' );

    if ( ! $wpdb->insert( WP_PREFIX . "wau_payments", $args ) )
        return false;

    $payment_id = $wpdb->insert_id;

    do_action( 'wau_add_payment', $payment_id );

    return $payment_id;
}
 
Назад
Сверху