PHP时间相减总结

这篇博客总结了在PHP中如何进行时间戳的相减操作,以获取两个时间之间的差值。通过使用strtotime函数将字符串转换为时间戳,然后进行计算,可以得到相差的秒数、分钟和小时。此外,还介绍了如何根据时间戳判断时间间隔并展示为XXX天XXX小时XXX分钟前的格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.

PHP里怎么将2个字符串时间相减得到秒数?
$a = '2010-02-05 16:08:20';
$b = '2010-02-05 16:09:20';
b比a大1分钟也就是60秒,怎么相减得到60

把这个转化为具体的时间戳,用strtotime

strtotime($b)-strtotime($a)=60

得到秒数,然后就可以减了

2.

$bbb= "08:55 ";
$aaa= "08:50 "   ;
echo   ceil((strtotime($bbb)-strtotime($aaa))/60);
?>

 

3.

获得系统当前时间 :
$ctime=strtotime(date("Y-m-d H:i:s"));

$ctime-$logtime>180

4.

时间戳比较

比如,数据库里面的时间戳:1276650817 是2010年6月16日 9:13:37
目前本地时间是:1276674758 是2010年6月16日 15:52:38
我想让前台显示,此文章是XXX天XXX小时XXX分钟前发布

----------------

$time = 1276674758-1276650817;
$yourhour = (int)($time/(60*60));
$yourmin = (int)($time%(60*60)/60);

把两个时间戳相减,然后把得到的数据跟一天的秒数相除再取整,然后再把剩下的跟小时去相除取整,以此类推就是啦

5.

$date1 = "2004-12-08 09:18:12";
echo strtotime($date)."
";
echo strtotime($date1)."
";
$date2 = strtotime($date1)-strtotime($date);
echo $date2; ?>
这样得到的$date2就是相差的秒数,再除以3600就是小时了

6.

我从某页面上匹配了时间 

$year = 2010  $month = 07  $day = 01  $hour = 17  $minute = 30

请问如何才能将今天的日期与上面这些值(年 月 日 时 分)相减,得出两个日期之间相差的天数、时间、分钟?然后print出来?

---------------------------------------------

 

 

UNIX时间戳

 

10.2  日期和时间

在开发Web程序时,时间起着重要的作用。不仅在数据存储和显示时需要日期和时间的管理,有一些功能模块的开发,时间通常是至关重要的。例如,网页静态化需要判断缓存时间、计算页面访问消耗的时间、在不同的时间段提供不同的功能等。PHP提供了强大的日期和时间处理功能,通过时间和日期函数库,能够得到PHP程序在运行时所在服务器中的日期和时间,并可以对它们进行检查和格式化,在不同格式之间进行转换。

10.2.1  UNIX时间戳

UNIX时间戳是保存日期和时间的一种紧凑简洁的方法,是大多数UNIX系统中保存当前日期和时间的一种方法,也是在大多数计算机语言中表示日期和时间的一种标准格式。以32位的整数表示格林威治标准时间,例如,使用整数11230499325表示当前时间的时间戳。UNIX时间戳是从1970年1月1日零点(UTC/GMT的午夜)开始起到当前时间所经过的秒数。1970年1月1日零点作为所有日期计算的基础,这个日期通常称为UNIX纪元。

因为UNIX时间戳是一个32位的数字格式,所以特别适用于计算机处理,例如计算两个时间点之间相差的天数。另外,由于文化和地区的差异,存在不同的时间格式,以及时区的问题。所以UNIX时间戳也是根据一个时区进行标准化,设计的一种通用格式,并且这种格式可以很容易的转换为任何格式。

也因为UNIX时间戳是一个32位的整数表示的,所以在处理1902年以前或2038年以后的事件,将会遇到一些问题。另外,在Windows下,由于时间戳不能为负数,如果使用PHP中提供的时间戳函数处理1970年之前的日期,就会发生错误。要使用PHP代码具有可移植性,必须记住这一点。

1.将日期和时间转变成UNIX时间戳

在PHP中,如果需要将日期和时间转变成UNIX时间戳,可以调用mktime()函数。该函数的原型如下所示:

  
  1. int mktime ( [int hour [, int minute [, int
    second [, int month [, int day [, int year ]]]]]] )

该函数中所有参数都是可选的,如果参数为空,默认将当前时间转变成UNIX时间戳。这样,和直接调用time()函数获取当前的UNIX时间戳功能相同。参数也可以从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值。如果只想转变日期,对具体的时间不在乎,可以将前三个转变时间的参数都设置为0。mktime()函数对于日期运算和验证非常有用,它可以自动校正越界的输入。如下所示:

  
  1.     echo date("M-d-Y", mktime(0, 0, 0, 12, 36, 2007))."/n";
    //日期超过31天,计算后输出Jan-05-2008 
  2.     echo date("M-d-Y", mktime(0, 0, 0, 14, 1, 2008))."/n";
    //月份超过12月,计算后输出Feb-01-2009 
  3.     echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 2009))."/n"; 
    //没有问题的转变,输出结果 Jan-01-2009 
  4.     echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 99))."/n"; 
    //会将99年转变为1999年, Jan-01-1999 
  5. ?>

2.日期的计算

在PHP中,计算两个日期之间相隔的长度,最简单的方法就是通过计算两个UNIX时间戳之差来获得。例如,在PHP脚本中接收来自HTML表单用户提交的出生日期,计算这个用户的年龄。如下所示:

  
  1.     $year = 1981;                                
    //从表单中接收用户提交的出生日期中的年份 
  2.     $month = 11;                                  
    //从表单中接收用户提交的出生日期中的月份 
  3.     $day = 05;                                     
    //从表单中接收用户提交的出生日期中的天 
  4.     $birthday = mktime (0, 0, 0, $month, $day, $year);    
    //将出生日期转变为UNIX时间戳 
  5.     $nowdate = time();                            
    //调用time()函数获取当前时间的UNIX时间戳 
  6.     $ageunix = $nowdate - $birthday;                 
    //两个时间戳相减获取用户年龄的UNIX时间戳 
  7.     $age = floor($ageunix / (60*60*24*365));         
    //将UNIX时间戳除以一年的秒数获取用户年龄 
  8.     echo "年龄:$age";                        
    //输出用户的年龄,根据计算得到结果27 
  9. ?>

在以上脚本中,调用mktime()函数将从用户出生日期转变为UNIX时间戳,再调用time()函数获取当前时间的UNIX时间戳。因为这个日期的格式都是使用整数表示的,所以可以将它们相减。又将计算后获取的UNIX时间戳除以一年的秒数,将UNIX时间戳转变为以年度量的单位。

http://book.51cto.com/art/200909/153872.htm

在 Java 中计算两个时间之间的差值,可以通过多种方式实现,具体取决于你使用的数据类型(如 `Date`、`LocalDateTime` 或时间戳)和你希望得到的时间单位(如、分钟、小时、天等)。 ### 使用 `Date` 和毫差计算时间间隔 对于 `java.util.Date` 对象,可以通过调用 `getTime()` 方法获取时间戳(毫数),然后进行相减操作,再根据需要将毫转换为、分钟、小时等单位。 ```java import java.util.Date; public class TimeDifference { public static void main(String[] args) throws InterruptedException { Date start = new Date(); // 模拟操作 Thread.sleep(2500); // 等待2.5 Date end = new Date(); long diffInMillis = end.getTime() - start.getTime(); // 毫差 long seconds = diffInMillis / 1000; long minutes = seconds / 60; long hours = minutes / 60; long days = hours / 24; System.out.println("时间差(毫):" + diffInMillis); System.out.println("时间差():" + seconds); System.out.println("时间差(分钟):" + minutes); System.out.println("时间差(小时):" + hours); System.out.println("时间差(天):" + days); } } ``` ### 使用 `LocalDateTime` 和 `Duration`/`ChronoUnit` 从 Java 8 开始,推荐使用新的日期时间 API(`java.time` 包),例如 `LocalDateTime`、`Duration` 和 `ChronoUnit`,它们提供了更清晰和线程安全的方式来处理时间差。 ```java import java.time.Duration; import java.time.LocalDateTime; public class NewTimeDifference { public static void main(String[] args) { LocalDateTime start = LocalDateTime.now(); // 模拟操作 try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } LocalDateTime end = LocalDateTime.now(); Duration duration = Duration.between(start, end); long seconds = duration.getSeconds(); long millis = duration.toMillis(); System.out.println("时间差():" + seconds); System.out.println("时间差(毫):" + millis); } } ``` ### 使用 `System.currentTimeMillis()` 直接计算 如果只是需要简单的时间戳差值,可以直接使用 `System.currentTimeMillis()` 获取当前时间戳并相减。 ```java long start = System.currentTimeMillis(); // 执行某些操作 try { Thread.sleep(1500); } catch (InterruptedException e) { e.printStackTrace(); } long end = System.currentTimeMillis(); long diff = end - start; System.out.println("时间差(毫):" + diff); ``` 上述方法可以根据具体需求选择使用,同时要注意并发场景下是否需要考虑线程安全和性能优化,例如使用 `LongAdder` 替代 `AtomicLong` 来提高高并发下的性能[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值