PHP:从时间戳生成相对日期/时间

PHP:从时间戳生成相对日期/时间

我基本上试图将Unix时间戳(time()函数)转换为兼容过去和未来日期的相对日期/时间。所以产出可能是:

2个星期前

1小时60分钟前

15分54秒前

10分15秒后

首先我尝试编写这个代码,但是创建了一个巨大的无法维护的功能,然后我在互联网上搜索了几个小时,但我能找到的只是一部分时间的脚本(呃:“1小时前”没有纪要)。

你有一个已经这样做的脚本吗?


aluckdog
浏览 684回答 9
9回答

慕工程1480053

666

慕码人8056858

此功能为您提供“1小时前”或“明天”之类的“现在”和“特定时间戳”之间的结果。function&nbsp;time2str($ts){ &nbsp;&nbsp;&nbsp;&nbsp;if(!ctype_digit($ts)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ts&nbsp;=&nbsp;strtotime($ts); &nbsp;&nbsp;&nbsp;&nbsp;$diff&nbsp;=&nbsp;time()&nbsp;-&nbsp;$ts; &nbsp;&nbsp;&nbsp;&nbsp;if($diff&nbsp;==&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;'now'; &nbsp;&nbsp;&nbsp;&nbsp;elseif($diff&nbsp;>&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$day_diff&nbsp;=&nbsp;floor($diff&nbsp;/&nbsp;86400); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($day_diff&nbsp;==&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($diff&nbsp;<&nbsp;60)&nbsp;return&nbsp;'just&nbsp;now'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($diff&nbsp;<&nbsp;120)&nbsp;return&nbsp;'1&nbsp;minute&nbsp;ago'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($diff&nbsp;<&nbsp;3600)&nbsp;return&nbsp;floor($diff&nbsp;/&nbsp;60)&nbsp;.&nbsp;'&nbsp;minutes&nbsp;ago'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($diff&nbsp;<&nbsp;7200)&nbsp;return&nbsp;'1&nbsp;hour&nbsp;ago'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($diff&nbsp;<&nbsp;86400)&nbsp;return&nbsp;floor($diff&nbsp;/&nbsp;3600)&nbsp;.&nbsp;'&nbsp;hours&nbsp;ago'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($day_diff&nbsp;==&nbsp;1)&nbsp;return&nbsp;'Yesterday'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($day_diff&nbsp;<&nbsp;7)&nbsp;return&nbsp;$day_diff&nbsp;.&nbsp;'&nbsp;days&nbsp;ago'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($day_diff&nbsp;<&nbsp;31)&nbsp;return&nbsp;ceil($day_diff&nbsp;/&nbsp;7)&nbsp;.&nbsp;'&nbsp;weeks&nbsp;ago'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($day_diff&nbsp;<&nbsp;60)&nbsp;return&nbsp;'last&nbsp;month'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;date('F&nbsp;Y',&nbsp;$ts); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$diff&nbsp;=&nbsp;abs($diff); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$day_diff&nbsp;=&nbsp;floor($diff&nbsp;/&nbsp;86400); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($day_diff&nbsp;==&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($diff&nbsp;<&nbsp;120)&nbsp;return&nbsp;'in&nbsp;a&nbsp;minute'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($diff&nbsp;<&nbsp;3600)&nbsp;return&nbsp;'in&nbsp;'&nbsp;.&nbsp;floor($diff&nbsp;/&nbsp;60)&nbsp;.&nbsp;'&nbsp;minutes'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($diff&nbsp;<&nbsp;7200)&nbsp;return&nbsp;'in&nbsp;an&nbsp;hour'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($diff&nbsp;<&nbsp;86400)&nbsp;return&nbsp;'in&nbsp;'&nbsp;.&nbsp;floor($diff&nbsp;/&nbsp;3600)&nbsp;.&nbsp;'&nbsp;hours'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($day_diff&nbsp;==&nbsp;1)&nbsp;return&nbsp;'Tomorrow'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($day_diff&nbsp;<&nbsp;4)&nbsp;return&nbsp;date('l',&nbsp;$ts); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($day_diff&nbsp;<&nbsp;7&nbsp;+&nbsp;(7&nbsp;-&nbsp;date('w')))&nbsp;return&nbsp;'next&nbsp;week'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ceil($day_diff&nbsp;/&nbsp;7)&nbsp;<&nbsp;4)&nbsp;return&nbsp;'in&nbsp;'&nbsp;.&nbsp;ceil($day_diff&nbsp;/&nbsp;7)&nbsp;.&nbsp;'&nbsp;weeks'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(date('n',&nbsp;$ts)&nbsp;==&nbsp;date('n')&nbsp;+&nbsp;1)&nbsp;return&nbsp;'next&nbsp;month'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;date('F&nbsp;Y',&nbsp;$ts); &nbsp;&nbsp;&nbsp;&nbsp;}}

心有法竹

function&nbsp;relativeTime($time)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;$d[0]&nbsp;=&nbsp;array(1,"second"); &nbsp;&nbsp;&nbsp;&nbsp;$d[1]&nbsp;=&nbsp;array(60,"minute"); &nbsp;&nbsp;&nbsp;&nbsp;$d[2]&nbsp;=&nbsp;array(3600,"hour"); &nbsp;&nbsp;&nbsp;&nbsp;$d[3]&nbsp;=&nbsp;array(86400,"day"); &nbsp;&nbsp;&nbsp;&nbsp;$d[4]&nbsp;=&nbsp;array(604800,"week"); &nbsp;&nbsp;&nbsp;&nbsp;$d[5]&nbsp;=&nbsp;array(2592000,"month"); &nbsp;&nbsp;&nbsp;&nbsp;$d[6]&nbsp;=&nbsp;array(31104000,"year"); &nbsp;&nbsp;&nbsp;&nbsp;$w&nbsp;=&nbsp;array(); &nbsp;&nbsp;&nbsp;&nbsp;$return&nbsp;=&nbsp;""; &nbsp;&nbsp;&nbsp;&nbsp;$now&nbsp;=&nbsp;time(); &nbsp;&nbsp;&nbsp;&nbsp;$diff&nbsp;=&nbsp;($now-$time); &nbsp;&nbsp;&nbsp;&nbsp;$secondsLeft&nbsp;=&nbsp;$diff; &nbsp;&nbsp;&nbsp;&nbsp;for($i=6;$i>-1;$i--) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$w[$i]&nbsp;=&nbsp;intval($secondsLeft/$d[$i][0]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$secondsLeft&nbsp;-=&nbsp;($w[$i]*$d[$i][0]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($w[$i]!=0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$return.=&nbsp;abs($w[$i])&nbsp;.&nbsp;"&nbsp;"&nbsp;.&nbsp;$d[$i][1]&nbsp;.&nbsp;(($w[$i]>1)?'s':'')&nbsp;."&nbsp;"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;$return&nbsp;.=&nbsp;($diff>0)?"ago":"left"; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$return;}用法:echo&nbsp;relativeTime((time()-256));4&nbsp;minutes&nbsp;16&nbsp;seconds&nbsp;ago
打开App,查看更多内容
随时随地看视频慕课网APP