我正在尝试转换格式为 2009-09-12 20:57:19
的时间戳,并使用PHP将其转换为类似 3 minutes ago
的内容 .
我找到了一个有用的脚本来做到这一点,但我认为它正在寻找一种不同的格式作为时间变量 . 我想要修改以使用此格式的脚本是:
function _ago($tm,$rcs = 0) {
$cur_tm = time();
$dif = $cur_tm-$tm;
$pds = array('second','minute','hour','day','week','month','year','decade');
$lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600);
for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = $cur_tm-($dif%$lngh[$v]);
$no = floor($no);
if($no <> 1)
$pds[$v] .='s';
$x = sprintf("%d %s ",$no,$pds[$v]);
if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0))
$x .= time_ago($_tm);
return $x;
}
我认为在前几行中脚本试图做一些看起来像这样的事情(不同的日期格式数学):
$dif = 1252809479 - 2009-09-12 20:57:19;
我如何将我的时间戳转换为(unix?)格式?
30 回答
当我们在我们的应用程序中开发消息或通知系统时,您需要显示时间,如'1小时前'或2周前等 . 它只是计算消息当前到发布时间的时间
我在这里回答此网站上之前提出的问题xx time ago function doesn't work
我希望这对你有所帮助
使用示例:
输入可以是任何supported date and time format .
输出:
功能:
这实际上是我发现的更好的解决方案 . 使用jQuery然而它完美地工作 . 它也与SO和Facebook的方式类似,因此您无需刷新页面即可查看更新 .
此插件将读取
<time>
标签中的datetime
attr并为您填写 .http://timeago.yarp.com/
我不知道为什么没有人提到碳 .
https://github.com/briannesbitt/Carbon
这实际上是php dateTime的扩展(这里已经使用过),它有:diffForHumans方法 . 所以你需要做的就是:
更多例子:http://carbon.nesbot.com/docs/#api-humandiff
这个解决方案的优点:
它适用于未来日期,并将返回2个月等内容 .
您可以使用本地化来获取其他语言,并且复数可以正常工作
如果您将开始使用Carbon,那么使用日期的其他事情将变得非常简单 .
这是我的解决方案,请根据您的要求进行检查和修改
谢谢
我发现结果如下丑:
因此,我实现了一个尊重复数的函数,删除空值,并且可选择缩短输出:
看起来好多了:
(可选)使用
$level = 2
缩短它,如下所示:如果您只需要英文版本,请删除
$lang
部分或编辑此翻译以满足您的需求:我稍微修改了原始函数(在我看来更有用,或逻辑上) .
只是扔另一种选择......
虽然我更喜欢DateTime方法发布here,但我不喜欢它显示0年等事实 .
我做了这个,'s working just fine it'的工作时间为unix时间戳,如
1470919932
或格式化的时间,如16-08-11 14:53:30
它可以帮助你检查它
我知道这里有几个答案,但这就是我想出来的 . 这只根据我回复的原始问题处理MySQL DATETIME值 . 数组$ a需要一些工作 . 我欢迎有关如何改进的意见 . 呼叫:
echo time_elapsed_string('2014-11-14 09:42:28');
我试过这个并且适合我
查看此链接以供参考here
谢谢!玩得开心 .
这里的许多解决方案都不考虑舍入 . 例如:
事件发生在两天前的下午3点 . 如果您在下午2点检查,它将在一天前显示 . 如果您在下午4点检查,它将在两天前显示 .
如果您正在使用unix时间,这有助于:
如果您担心闰秒和夏令时,这并不完美 .
您必须获取每个时间戳的单个部分,并将其转换为Unix时间 . 例如,时间戳,2009-09-12 20:57:19 .
(((2008-1970)* 365)(8 * 30)12)* 24 20会给你一个从1970年1月1日起的小时数的粗略估计 .
取这个数字,乘以60并加57得到分钟数 .
拿它,乘以60并加19 .
然而,这将非常粗略和不准确地转换它 .
你有什么理由不能开始正常的Unix时间吗?
如果使用MySQL,请使用UNIX_TIMESTAMP()函数 .
此功能不能用于英语 . 我翻译了英文单词 . 在使用英语之前,这需要更多的修复 .
从上面稍微修改一下答案:
这就是我的用途 . 它是Abbbas khan帖子的修改版本:
用于:
功能:
哟可以使用:
以下是一个非常简单且极其有效的解决方案 .
echo timeElapsed(1201570814);
样本输出:
6个月4个月3周4天12小时40分钟和36秒 .
这是我之前 Build 的通知模块的解决方案 . 它返回的输出类似于Facebook的通知下拉列表(例如,1天前,刚才等) .
just pass the date time to this func. it would print out in time ago format for you
最初编写并在此处提供link
需要time()值,它会告诉你几秒/分钟/小时/天/年/几十年前 .
我使用以下功能已有好几年了 . 它工作正常: