我目前有自动每月更改月份数和MYSQL表的代码,但它显示的计时器仍然每24小时重置一次。我需要这样做,以便计时器每月重置而不是每24小时重置一次。我没有直接思考,需要一些帮助来解决这个问题。
基本上我需要它,以便$ month_end_time从30天,0小时,0分0秒减少到0天,0小时,0分0秒,然后重置为30天。目前,它从30天减少到29天,然后重置,因为它来自一个每24小时重置一次的脚本,我将它移植到每月。
致@slmoVanKielmo原始代码段。
提前致谢。
define("FIRST_DAY_STRING", "2014-4-6");
define("SHIFT_DAYS", 'P30D');
define("TIME_SUFFIX", " 0:00:00 GMT+11:00");
$today = new DateTime();
$first_day = new DateTime(FIRST_DAY_STRING);
$interval = $first_day->diff($today);
$days = $interval->format('%R%a days');
$end_date = $today->add(new DateInterval(SHIFT_DAYS));
$month_number = floor(intval($days) / 30 + 1);
$txid = "tx$month_number";
$month_end_time = $end_date->format('Y-n-j');
$month_end_time .= TIME_SUFFIX;
答案 0 :(得分:1)
我怀疑你可能会过度思考这个问题,因为它包括" date"。当移动数月时,它可能会很棘手,因为(正如Raptor所说),几个月之间的天数不同。
但是,根据您的评论,您实际上在一个日期和另一个日期之间查找 30天期限的数量。这可以通过基本的数学和Unix时间戳来完成:
$start = strtotime('2012-04-12 00:00:00 GMT');
$today = strtotime('00:00:00 GMT');
$days = ($today - $start) / 60 / 60 / 24;
$months = $days / 30;
echo "<pre>
Days: $days
Months: $months
";
这将给出:
Days: 723
Months: 24.1
http://codepad.viper-7.com/KBVfqq
如果你想弄清楚多少天:
$start = strtotime('2012-04-12 00:00:00 GMT');
$today = strtotime('00:00:00 GMT');
$days = ($today - $start) / 60 / 60 / 24;
$months = $days / 30;
$months_days = floor($months) . " months, " . ($days - (floor($months) * 30)) . " days";
echo "<pre>
Days: $days
Months: $months
Months and Days: $months_days
";
,并提供:
Days: 723
Months: 24.1
Months and Days: 24 months, 3 days
http://codepad.viper-7.com/AdnFsu
这意味着在开始和今天的日期之间,已经有24个完整的30天时段,我们目前处于第25个时段(ceil($months)
)。这似乎足以满足你所追求的目标,尽管具体使用期间值可能需要更好的解释。