2010-02-03 97 views
4

我如何转换2个日期外汇牌价时间戳月和日

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

之间的时间戳差到几个月和天量根据需要输出继电器:

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

事情是我需要根据生产日,月和年的用户输入来计算ITEM的年龄。精确度是几个月。例如,4岁零5个月大。 坏事是服务器是PHP <5.3.0,所以我不能使用DateTime diff函数。 – Blackbeard 2010-02-03 12:05:59

+0

您需要在您的问题中使PHP <5.3更突出,例如标题 – 2010-12-17 10:22:55

回答

1

你要的最大问题这里面临的是定义几个月。你打算使用4周= 1个月,30天= 1个月等...我会试图将数字作为天数或至多将其转换为数周或数天

2

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

+0

假设您将1个月定义为等于30天。 – ZombieSheep 2010-02-03 11:50:42

1

我不认为这是在PHP中可用。所以你将不得不使用整数除法(或普通除法)和模运算符。

例如(例如使用小时,而不是毫秒,但它是重复相同的特技):

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

这会给$天= 1和$小时= 3

正如在其他答复指出。查找月份比较困难,因为每月的天数不固定。

+0

任何机会,我可以用MySQL查询做到这一点? – Blackbeard 2010-02-03 11:51:31

+0

虽然不是所有的日子都有24小时。 – rjp 2010-02-03 11:52:42

+0

Mysql实际上有几个功能可以帮助你,这个似乎是你正在寻找的(查看其他几个有用功能的页面):http://dev.mysql.com/doc/refman/5.1/en/日期和时间函数.html#function_timediff 至于所有24小时的日子:如果忽略闰秒,UTC中的所有日子都有24小时,23和25小时只发生在夏令时中,而UTC没有有 – Thirler 2010-02-04 08:28:11

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

我猜这个月有31天会有差异。 – Blackbeard 2010-02-03 12:07:34

+2

并且永远不要尝试那些包含二月份的时间段,有时候它会有一天休息,有时是2.当然,如果精度不是那么重要,它会工作 – dbemerlin 2010-02-03 14:07:56

4

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

+0

不幸的是PHP 5> = 5.3.0,否则我会当然。 – Blackbeard 2010-02-03 11:54:11

1

你可能想看看DateTime.diff,因为它能够表达你期望从人类比较几个月(例如2010年1月1日至2010年1月3日是(恰好)3个月的差异)。

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

//免责声明:未经测试

+0

不幸的是返回错误的月数。不管怎么说,还是要谢谢你。 – Blackbeard 2010-02-03 12:06:41

+0

现在应该是正确的(如果我没有再混合日期()参数) – dbemerlin 2010-02-03 12:24:07

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天并计算月数。它可以满足一些需求(显示博客评论年龄等),完全不适合其他人。

0

使用MySQL,以计算找到的个月的溶液:

SELECT TIMESTAMPDIFF(月, '{$ start_time_str}', '{$ end_time_str}')AS米

感谢所有参与。

+1

好横向思维! – PhoebeB 2010-02-03 18:25:41

+1

很好,你发现了一个*你*问题的解决方案,但是这个解决方案并没有解决你的问题中发布的问题*,这就是如何在PHP中找到几个月的差异<5.3。这篇文章尚未解决... – 2010-12-17 10:27:35

0

我知道这已经很旧了,但是我在查找某些东西来计算时间戳格式为“3年& 6个月”与时间戳格式中给定dob格式的时差时遇到它。我写了以下哪些人可能会觉得有用。

// 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';