使用日期对象计算日期时间的最准确方法

时间:2014-10-10 10:21:17

标签: php datetime

我正在访问访问网站,付费会员将获得 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
像我说的那样,这是我想出的最好的,但我怀疑它不准确。

非常适合一些建议

3 个答案:

答案 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.