Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使PHP/MySQL时间戳看起来更有吸引力_Php_Mysql_Timestamp_Date Formatting - Fatal编程技术网

使PHP/MySQL时间戳看起来更有吸引力

使PHP/MySQL时间戳看起来更有吸引力,php,mysql,timestamp,date-formatting,Php,Mysql,Timestamp,Date Formatting,因此,基本上,我目前正在从MySQL数据库中选择一个时间戳。在数据库中,时间戳如下所示: 2010-06-30 12:36:08 显然,对于一个webapp来说,这对用户来说不是很有吸引力。所以,我使用了一些CodeIgniter函数,使它看起来更好一些 <h4 class="timestamp"> <?php // Quickly calculate the timespan $post_date = mysql_to_unix($row->date);

因此,基本上,我目前正在从MySQL数据库中选择一个时间戳。在数据库中,时间戳如下所示:

2010-06-30 12:36:08

显然,对于一个webapp来说,这对用户来说不是很有吸引力。所以,我使用了一些CodeIgniter函数,使它看起来更好一些

<h4 class="timestamp">
    <?php // Quickly calculate the timespan
    $post_date = mysql_to_unix($row->date);
    $now = time();
    echo timespan($post_date, $now);?> ago
</h4>

以前
如果不使用CodeIgniter,则除了
echo timespan()
之外,所有内容都是标准的PHP。CodeIgniter只是将其作为“英语”时间跨度进行了呼应。因此,示例输出为:

2个月、4周、5小时、20分钟前

这一切都很好,但是,我想让它看起来更美好。。。逗号太多,而且有点太长(我知道,我很挑剔…)。我喜欢的是:

  • 如果时间跨度小于一天,则输出应为
    7小时33分钟前
  • 如果时间跨度小于一周,则输出应在4天前
  • 如果时间跨度小于一个月,则输出应为6天前的
    2周
  • 如果时间跨度超过一个月,则输出应该是4个月前的
  • 在时间跨度超过一年的最终情况下,输出应该是一年前的
  • 正如您所看到的,我目前正在使用CodeIgniter函数来简化这个过程——但是如果有任何本机PHP函数可以实现我想要的功能,那就太棒了

    谢谢你的帮助


    Jack

    这最好在表示层的客户端完成。下面是一个JS解决方案:

    <?= date("c", $post_date) ?>
    
    是一个jQuery插件,可以轻松支持自动更新模糊时间戳(例如“4分钟前”或“大约1天前”)

    Timeago将在
    标题中使用Timeago的
    类和ISO 8601时间戳来打开所有abbr元素:

    <abbr class="timeago" title="2008-07-17T09:24:17Z">July 17, 2008</abbr>
    
    2008年7月17日
    
    变成这样:

    <abbr class="timeago" title="July 17, 2008">about a year ago</abbr>
    
    大约一年前
    要将日期转换为ISO 8601格式,可以执行以下操作:

    <?= date("c", $post_date) ?>
    
    
    
    示例:

    您打开此页不到一分钟 一分钟前。(这将在每个月更新。) 等一下

    此页面最后修改11天 以前

    瑞安出生于31年前


    这最好在表示层的客户端完成。下面是一个JS解决方案:

    <?= date("c", $post_date) ?>
    
    是一个jQuery插件,可以轻松支持自动更新模糊时间戳(例如“4分钟前”或“大约1天前”)

    Timeago将在
    标题中使用Timeago的
    类和ISO 8601时间戳来打开所有abbr元素:

    <abbr class="timeago" title="2008-07-17T09:24:17Z">July 17, 2008</abbr>
    
    2008年7月17日
    
    变成这样:

    <abbr class="timeago" title="July 17, 2008">about a year ago</abbr>
    
    大约一年前
    要将日期转换为ISO 8601格式,可以执行以下操作:

    <?= date("c", $post_date) ?>
    
    
    
    示例:

    您打开此页不到一分钟 一分钟前。(这将在每个月更新。) 等一下

    此页面最后修改11天 以前

    瑞安出生于31年前

    $ts=new DateTime();
    $ts->setTimestamp($my_timestamp);
    $cur=新日期时间();
    $difference=$cur->diff($ts);
    如果($difference->format(“%a”)==0)
    $out=$difference->format(“%h小时%i分钟”);
    elseif($difference->format(“%a”)<7)
    $out=$difference->格式(“%a天”);
    elseif($difference->format(“%m”)==0){
    $days=$difference->format(“%a”);
    $out=sprintf(“%d周%d天”),下限($d/7天),
    $days%7);
    }
    elseif($difference->format(“%y”)==0)
    $out=$difference->format(“%m个月”);
    其他的
    $out=“超过一年”;
    
    如果你不想要像“1天”这样的东西,你必须做一些调整; $ts->setTimestamp($my_timestamp); $cur=新日期时间(); $difference=$cur->diff($ts); 如果($difference->format(“%a”)==0) $out=$difference->format(“%h小时%i分钟”); elseif($difference->format(“%a”)<7) $out=$difference->格式(“%a天”); elseif($difference->format(“%m”)==0){ $days=$difference->format(“%a”); $out=sprintf(“%d周%d天”),下限($d/7天), $days%7); } elseif($difference->format(“%y”)==0) $out=$difference->format(“%m个月”); 其他的 $out=“超过一年”;

    如果你不想要像“1天”这样的东西,你必须做一些调整。

    我不知道。只需为自己定制一个我所不知道的实用程序函数(Helper或CI中的某些东西)。只需为自己创建一个自定义实用程序函数(Helper或CI中的某些东西),它非常棒,允许缓存。这很有趣,但它不是一个PHP解决方案。另外,它的措辞方式,不清楚
    date(“c”,即$post_date)
    与任何事情都有什么关系(我甚至以为你说的是输出下面的内容)。@Artefactor:这是因为你没有读Timeago页面。它使用
    timeago
    标题中的ISO 8601时间戳来工作元素。上面的
    date()。我认为StackOverflow使用了类似的用法:
    52分钟前
    @Bak是的,现在好多了+1这非常好,允许缓存。这很有趣,但它不是一个PHP解决方案。另外,它的措辞方式,不清楚
    date(“c”,即$post_date)
    与任何事情都有什么关系(我甚至以为你说的是输出下面的内容)。@Artefactor:这是因为你没有读Timeago页面。它使用
    timeago
    标题中的ISO 8601时间戳来工作元素。上面的
    date()。我认为这很有用