1


我在 WordPress 中使用 s2member。
我为 7 月 31 日设置了固定 EOT(期末)。
这是我正在使用的编码..

<?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 日期设置为 2013 年 7 月 31 日。
但我需要根据日期自动生成年份。
如果用户在 7 月 31 日之前注册,EOT 年份应保持为当年。
如果用户在 7 月 31 日之后注册,EOT 年份应设置为下一年(2014 年)。
这将起作用,而无需每年进行修改。

希望这是有道理的!谢谢您的帮助!

编辑过
这行得通吗...

<?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" ... /]

编辑#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" ... /]
?>

问题是...
a)固定 EOT 日期为 7 月 30 日。
b)如果用户在日期之后注册,我在页面上收到错误消息,指出该值需要为 1 或更大。
“无效的表单配置。无效的“tp”属性。试用期。提供时,必须 >= 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" ... /]



这种结构成功地将 7 月 31 日作为 EOT 日期实施。当用户在 7 月 31 日之前注册时,将设置当前年份。如果用户在 7 月 31 日之后注册,则设置为下一年。

4

3 回答 3

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));

那应该工作。

于 2013-06-21T20:09:05.730 回答
0

假设您已将 $now 转换为 time() 格式:

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

31536000 = 1 年的秒数

如果您经常执行此功能(在循环中?) strtotime 很昂贵

于 2013-06-22T05:46:28.307 回答
0

如果我们在$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;

输出:

mmdd 是:0

该代码无法按预期工作。将日期转换为 int 是一个坏主意,因为您可以看到 if 产生 0,这意味着您的 if 语句将始终为真;

我的建议可以很好地查看在截止之前和截止之后测试的这段代码。您的代码在带有strtotime("now")注释的 doStuff 函数中,因此我可以更改日期字符串:

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
于 2013-06-21T20:11:39.650 回答