PHP将时间戳转换为月和日

时间:2010-02-03 11:42:57

标签: php date time timestamp

如何转换2个日期之间的时间戳差异

$diff = abs(strtotime($date2) - strtotime($date1));

根据需要输出数月和天的数量:

$res = 4.05 //-> 4 months and 5 days

10 个答案:

答案 0 :(得分:7)

这样的事可能有用。我的数学可能有点偏差。

$diff = abs(strtotime($date2) - strtotime($date1));

define('DAY',60*60*24, true);
define('MONTH',DAY*30, true);
define('YEAR',DAY*365, true);

$years = floor($diff / (YEAR));
$months = floor(($diff - $years * YEAR) / (MONTH));
$days = floor(($diff - $years * YEAR - $months*MONTH ) / (DAY));

答案 1 :(得分:4)

除非您想根据平均月份长度做出假设,否则您不能像月份长度那样接近它。如果你想要正确的差异你需要使用实际日期然后你可以使用PHP日期差异 - http://www.php.net/manual/en/datetime.diff.php

答案 2 :(得分:3)

对于PHP 5.3,您可能希望使用
    http://de.php.net/manual/en/datetime.diff.php

对于较低版本,您可能需要使用以下内容: (简单的解决方案,最快或最好)

$days = 0;
$months = 0;
$month = date("n", $time1);
while ($time1 < $time2)
{
    ++$days;
    if (date("n", $time1) != $month)
    {
        $month = date("n", $time1);
        $days = 0;
        $months++;
    }
    $time1 = mktime(0, 0, 0, date("n", $time1), date("j", $time1) + 1, date("Y"));
}

//免责声明:未经测试

答案 3 :(得分:2)

时间戳实际上是自Unix Epoch以来的秒数,即1970年1月1日。因此,时间戳的差异实际上是秒。因此,要将秒数转换为天数,您只需将其除以一天中的秒数,即$ Timestamp /(24x60x60)。同月的$ Timestamp /(24x60x60x30)

答案 4 :(得分:1)

你要面对的最大问题是定义几个月。你打算用4周= 1个月,30天= 1个月等等......我很想把这个数字留下几天或者最多转换成几周和几天

答案 5 :(得分:1)

我认为这不适用于php。所以你必须使用整数除法(或正常除法)和模运算符。

例如(示例使用小时而不是ms,但重复的是相同的技巧):

$totalhours = 27;
$days = round($totalhours / 24);
$hours = $totalhours % 24;

这将给出$ days = 1和$ hours = 3

如其他回复中所述。找到月份比较困难,因为每月的天数不固定。

答案 6 :(得分:1)

您可能需要查看DateTime.diff,因为它可以表达您在比较月份时对人类的期望差异(例如2010年1月1日至2010年3月1日是(确切)3的差异个月)。

答案 7 :(得分:1)

您可以使用类似这样的函数计算日期中的日期差异

function diff_date_day($day , $month , $year , $day2 , $month2 , $year2){
  $timestamp = mktime(0, 0, 0, $month, $day, $year, 0);
  $timestamp2 = mktime(0, 0, 0, $month2, $month2, $year2);
  $diff = floor(($timestamp - $timestamp2) / (3600 * 24)); 
  return $diff; 
}

假设平均月份为30天并计算月数。它可以满足某些需求(显示博客评论年龄等),并且完全不适合其他人。

答案 8 :(得分:0)

找到一个使用MySQL来计算月份的解决方案:

SELECT TIMESTAMPDIFF(MONTH,'{$ start_time_str}','{$ end_time_str}')AS m

感谢所有参与者。

答案 9 :(得分:0)

我知道现在已经过时了,但是我在寻找能够以时间戳格式从给定的dob计算“3年和6个月”格式的时差时遇到了它。我写了以下有人可能会觉得有用的内容。

// Determine age
$time_start = 'YOUR DOB';
$time_end = strtotime('today');
$years = 0;
$months = 0;
while ($time_start < $time_end){
    $tmp_time = strtotime('+ 1 year', $time_start);
    if ($tmp_time < $time_end){
        $years++;
        $time_start = $tmp_time;
    } else {
        $tmp_time = strtotime('+ 1 month', $time_start);
        if ($tmp_time < $time_end){
            $months++;
            $time_start = $tmp_time;
        } else {
            $time_start = $time_end;
        }
    }
}
$age = $years.' years &amp; '.$months.' months';