2013-06-21 5 views
1


Я использую s2member с WordPress.
Я установил фиксированное EOT (окончание срока) на 31 июля.
Вот кодирование я использую ..PHP; auto generate год согласно дате регистрации

<?php 
$now = strtotime("now"); 
$fixed_time = strtotime("31 July 2013"); 
$days_until_fixed_time = round(($fixed_time - $now)/($seconds_in_one_day = $86400)); 
?> 

[s2member-Pro-PayPal-Form... tp="<?php echo $days_until_fixed_time; ?>" tt="D" ... /] 

код прекрасно работает как установить дату EOT, как 31 июля 2013 г.
Но мне нужен год, чтобы Автогенерация по дате ,
Если пользователь регистрирует до 31 июля, EOT год должен оставаться в текущем году.
Если пользователь регистрирует после 31 июля, год EOT должен быть установлен на следующий год (2014).
И это будет работать без необходимости изменять каждый год.

Надеюсь, это имеет смысл! Спасибо за помощь!

EDITED
это будет работать ...

<?php 
$now = strtotime("now"); 
$fixed_time = strtotime("31 July " . date("Y")); 

if($now > $fixed_time) 
$fixed_time = strtotime("+1 year", $fixed_time); 

$days_until_fixed_time = round(($fixed_time - $now)/($seconds_in_one_day = $86400)); 
?> 

[s2member-Pro-PayPal-Form... tp="<?php echo $days_until_fixed_time; ?>" tt="D" ... /] 

EDIT # 2 этот код сейчас ..

<?php 
$now = strtotime("now"); 
$mmdd = (int)date("M d"); 
$yyyy = (int)date("Y"); 
if ($mmdd <= 731) 
$fixed_time = strtotime("31 July " . $yyyy); 
else 
$fixed_time = strtotime("31 July " . ($yyyy+1)); 

$days_until_fixed_time = round(($fixed_time - $now)/($seconds_in_one_day = "86400")); 

[s2member-Pro-PayPal-Form... tp="<?php echo $days_until_fixed_time; ?>" tt="D" ... /] 
?> 

проблема ...
а) ФИКСИРОВАННЫЙ EOT date co 30 июля.
б) если пользователь регистрируется ПОСЛЕ даты, я получаю сообщение об ошибке на странице говоря, что значение должно быть 1 или больше ..
«Недопустимая конфигурация формы. Invalid„ф“атрибут. Испытательный период. Когда при условии, должно быть> = 1. "
все еще нужна помощь ..

=============== РЕШЕНИЕ ================
Разобрался рабочая модель! Спасибо за помощь!

<?php 
$now = strtotime("now"); 
$fixed_time = strtotime("31 July " . date("Y")); 

if($now > $fixed_time) 
    $fixed_time = strtotime("+1 year", $fixed_time); 

$days_until_fixed_time = round(($fixed_time - $now)/(86400)); 
?> 

[s2member-Pro-PayPal-Form... tp="<?php echo $days_until_fixed_time; ?>" tt="D" ... /] 



Эта структура успешно реализует 31 июля в качестве даты СРВ. Когда пользователь регистрируется до 31 июля, устанавливается текущий год. Если пользователь регистрируется после 31 июля, устанавливается следующий год.

+0

$ теперь будет, когда пользователь регистрируется, да. независимо от того, когда они регистрируются, конечный срок - 31 июля. Это зависит только от того, до 31 июля или после него, поэтому система знает, когда устанавливать «год». –

+0

Новые изменения выглядят хорошо для меня .. – immulatin

+0

Код EDITED не работает. ничего не отображается, не отображается форма PayPal. Любые идеи, что может быть не так с этим? –

ответ

0

Вы можете просто заранее год, если мы после UPDATE $fixed_time

if($now > $fixed_time) 
    $fixed_time = strtotime("+1 year", $fixed_time); 

для нового кода:

$now = strtotime("now"); 
$mmdd = (int)date("M d"); 
echo "mmdd is: $mmdd" . PHP_EOL; 

Выходы:

ММДД является: 0

Этот код не работает должным образом. Приведение даты в int - это плохая идея, так как вы можете видеть, производит ли она 0, что означает, что ваш оператор if всегда будет истинным;

Мое предложение прекрасно работает над этим кодом, который проверяет перед отключением и после отсечки. Ваш код находится в функции DoStuff с strtotime("now") закомментирован так что я могу изменить дату строку:

echo "Checking for before cutoff date: " . PHP_EOL; 
doStuff("30 July 2013"); // Before the cutoff 
echo PHP_EOL . "Checking for after cutoff: " . PHP_EOL; 
doStuff("1 August 2013"); // After the cutoff 

function doStuff($datestr){ 
    $now = strtotime($datestr); 
    //$now = strtotime("now"); 
    $fixed_time = strtotime("31 July " . date("Y")); 

    echo "Fixed time before change is: " . date("m-d-Y", $fixed_time) . PHP_EOL; 
    if($now > $fixed_time) 
     $fixed_time = strtotime("+1 year", $fixed_time); 

    echo "Fixed time is: " . date("m-d-Y", $fixed_time) . PHP_EOL; 

    $days_until_fixed_time = round(($fixed_time - $now)/(86400)); 

    echo "Days until: $days_until_fixed_time" . PHP_EOL; 
} 

Выход:

Checking for before cutoff date: 
    Fixed time before change is: 07-31-2013 
    Fixed time is: 07-31-2013 
    Days until: 1 

Checking for after cutoff: 
    Fixed time before change is: 07-31-2013 
    Fixed time is: 07-31-2014 
    Days until: 364 
0

Если вы измените эту строку в год динамически:

$mmdd = (int)date("M d"); 
$yyyy = (int)date("Y"); 
if ($mmdd <= 731) 
    $fixed_time = strtotime("31 July " . $yyyy); 
else 
    $fixed_time = strtotime("31 July " . ($yyyy+1)); 

, который должен работать.

+0

Это работает до 31 июля зарегистрированных пользователей, но если пользователь регистрируется ПОСЛЕ 31 июля ... не будет ли это устанавливать дату на текущий год, а не на следующий год? –

+0

Ах, извините, не поймал этого. Отредактировал ответ на основе требований. – Suman

+0

см. Последнее обновление .. –

0

Если предположить, что вы конвертированы $ в настоящее время формата в время():

$now = time(); 
$term = mktime(0,0,0,7,31); 
$term = ($now > $term) ? $term + 31536000 : $term; 

31536000 = количество секунд, в течение 1 года

если вы делаете (в цикле?) strtotime стоит дорого

+0

Что значит «в цикле»? эта функция вызывается только тогда, когда пользователь регистрируется для членства. –

+0

В конце дня используйте только strtotime, когда вам это нужно, поскольку он дороже, чем просто добавление двух чисел вместе. – Bradley

+0

действительно ли это имеет значение или имеет большую значимость, если оно используется только тогда, когда пользователь нажимает кнопку для отправки регистрационной формы? (только 100-200 раз в год ..) –

Смежные вопросы