我正在访问访问网站,付费会员将获得 3个月访问期到该网站。因此,问题是如何计算确切的3个月日期。
即,有些月份为28天,其他月份为31天;正常年份是365,但农历年是 354天。
我考虑将日期转换为 UNIX时间戳,然后以秒为单位计算3个月。但我不确定这是否是最有效和最准确的方法。
下面是我的提议,我真的很感激一些建议;
时钟开始时的时间戳
$UNIXtimeStampNow = new \DateTime("now"))->format('U')
计算自日期起3个月:
$numberDaysInMonth = 30.41 = 365/ 12 //number of days in months
$numberSecondsInDay = 86400; //number seconds in a day
$secondsIn3Months = ($numberDaysInMonth * $numberSecondsInDay) * 3 //number seconds in 3 months
new \DateTime("$secondsIn3Months"); //convert back to date object
像我说的那样,这是我想出的最好的,但我怀疑它不准确。
非常适合一些建议
答案 0 :(得分:1)
正如我在评论中所说,只需使用DateTime对象的add()
方法和DateInterval
$d = new \DateTime("now");
$d->add(new \DateInterval('P3M'));
echo $d->format('Y-m-d H:i:s');
答案 1 :(得分:0)
将我的评论转换为答案......
您可以使用php内置函数strtotime来实现此目的。此函数Parse about any English textual datetime description into a Unix timestamp
。
所以,如果您已经在使用unix时间戳,那么从现在起3个月就可以这样做,用unix时间戳表示:
$three_months_from_now = strtotime("+3 month");
如果您要输出该值,它将如下所示:
echo date('d/m/Y H:i:s a', strtotime("+3 month"));
// outputs: 10/01/2015 11:32:42 am
注意,如果您手动进行计算,则会有很大不同;即。
<?php
$now = time();
$one_hour = 3600; // seconds
$one_day = $one_hour * 24;
$one_month = 30 * $one_day;
$three_months = 3 * $one_month;
echo date('d/m/Y H:i:s a', $now + $three_months);
// outputs: 08/01/2015 10:34:24 am
?>
答案 2 :(得分:0)
php 5的DateTime class
非常稳定,使用时会带来准确的结果
因此。使用DateTime类时,建议您始终设置TimeZone
用于时差精度的目的。
//the string parameter, "now" gets us time stamp of current time
/*We are setting our TimeZone by using DateTime class
Constructor*/
$first = new DateTime("now",new DateTimeZone('America/New_York'));
// 3 months from now and again setting the TimeZone
$second = new DateTime("+ 3 months",new DateTimeZone('America/New_York'));
$diff = $second->diff($first);
echo "The two dates have $diff->m months and $diff->days days between them.";
output: The two dates have 3 months and 92 days between them.