PHP:格式化时间 Stackoverflow 或 Apple Mail 风格

2023-12-08

有这个php.net 文档中的非常好的功能使您能够以 Facebook 风格的方式格式化时间(例如,2 minutes ago, 4 weeks ago, or 3 years ago).

不过,我更喜欢 Stackoverflow 和 Apple Mail 的方式,通常如下:

  1. 当前日期列于x seconds ago or x hours ago或时间(例如4:35pm).
  2. 昨天被列为“昨天”。
  3. 此后的所有日期均按 M/D/Y 列出。

是否有人改编了此 php.net 脚本来执行此操作,或者可能共享实现相同目标的不同脚本?

<?php 

  function nicetime($date)
 {
    if(empty($date)) {
      return "No date provided";
    }

$periods         = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
$lengths         = array("60","60","24","7","4.35","12","10");

$now             = time();
$unix_date         = strtotime($date);

   // check validity of date
if(empty($unix_date)) {    
    return "Bad date";
}

// is it future date or past date
if($now > $unix_date) {    
    $difference     = $now - $unix_date;
    $tense         = "ago";

} else {
    $difference     = $unix_date - $now;
    $tense         = "from now";
}

for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
    $difference /= $lengths[$j];
}

$difference = round($difference);

if($difference != 1) {
    $periods[$j].= "s";
}

  return "$difference $periods[$j] {$tense}";
}

$date = "2009-03-04 17:45";
$result = nicetime($date); // 2 days ago

?>

好吧,我回答了我自己的问题。

关键是要跟踪划分了多少轮for循环执行直到当前时间减去输入时间的商,$difference, 除以$j的第 值$lengths数组项小于$j+1该数组的值。

我通过增加变量来跟踪这一点$i(注意if/elseif/else条款证明了我上面提到的三点)在这个修改版本中nicetime():

     ///http://php.net/manual/en/function.time.php
  function nicetime($date)
 {
    if(empty($date)) {
      return "No date provided";
    }

$periods         = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
$lengths         = array("60","60","24","7","4.35","12","10");

$now             = time();
$unix_date         = strtotime($date);

   // check validity of date
if(empty($unix_date)) {    
    return "Bad date";
}

// is it future date or past date
if($now > $unix_date) {    
    $difference     = $now - $unix_date;
    $tense         = "ago";

} else {
    $difference     = $unix_date - $now;
    $tense         = "from now";
}
$i=0;
for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
    $i++;
    $difference /= $lengths[$j];
}

$difference = round($difference);

if($difference != 1) {
    $periods[$j].= "s";
}

if($i<3){
    $day="$difference $periods[$j] {$tense}";
    return $day;
    //satisfies case #1 where time is listed as seconds, minutes, hours ago
}

elseif($i==3){
    $difference == 1 && $periods[$j]=='day' ? $day='yesterday':     
    $day="$difference $periods[$j] {$tense}";
    return $day;        
    //satisfies case #2 where time is listed as yesterday if not the current day

}
else{
    return $date;       
    // satisfies case #3 where date is listed as M/D/Y if greater than a week old
}   

}

echo "case#1: ".nicetime('2012-08-13 23:12:16');
echo "case#2: ".nicetime('2012-08-12 23:12:16');
echo "case#3: ".nicetime('2012-07-07 23:12:16');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP:格式化时间 Stackoverflow 或 Apple Mail 风格 的相关文章

  • 使用 .htaccess 启用 PHP 短标签

    我在自己的 Centos 服务器上设置了 Apache 并具有多个虚拟 Web 服务器 并且我希望仅为位于以下位置的其中一个 Web 服务器启用 PHP 短标记 var www ostickets html 我可以通过添加成功启用短标签sh
  • 通过jquery传递搜索参数

    我有一个表单 如果用户输入搜索查询 其参数应通过 jquery 传递 并在获取结果后将结果加载到 div 容器中 由于我不太熟悉 jquery 我该怎么做 html currently the data is being displayed
  • 更新重复密钥上的复合密钥 [重复]

    这个问题在这里已经有答案了 我需要更新新行 如果两者都满足 date dat and empId who 作为复合键 但如果其中之一或两者不同 则插入 sql INSERT INTO history SET endtimestamp now
  • Laravel 验证:存在附加列条件 - 自定义验证规则

    在 Laravel 中指定存在验证规则时 是否有一种方法可以引用另一个字段 我希望能够说输入 a 必须存在于表 a 中 输入 b 必须存在于表 b 中 并且表 b 中列 x 的值必须等于输入 a 最好通过例子来解释 public rules
  • 我如何知道请求是否来自 flash swf?

    我有一个用 flash 开发的应用程序 我需要访问一些 php 文件 因此 如果访问来自 swf 则 php 文件会返回一些数据 如何判断请求是否来自Flash 无需将 get post 变量传递给 php 可能是用户代理 推荐人 请记住
  • PHP上传文件产生错误代码4。为什么?

    HTML
  • 访问 public_html 级别之外/以下的文件

    如何通过 url 访问文件 home uzair etc index php 即使我运行域 something com 它显示了 home uzair public html index php 这个文件 任何人请帮助我如何访问放置在 ho
  • $_POST、$_GET 和 $_REQUEST 之间有什么区别?

    我对这些超级全局变量有点困惑 POST GET and REQUEST 在 PHP 中 在 PHP 中哪些场景需要使用这些变量 这三个变量的主要区别是什么 POST是在使用 application x www form urlencoded
  • PHP 如果不存在,则从字符串中删除 ','

    我正在运行这段代码 stmt pdo conn gt prepare SELECT from admin where support emails support emails and logged logged and disabled
  • TCPDF/PHP 和字体:大写数字(血统数字?旧样式?)

    我得到了一种特殊的字体 上面有这样的数字 例如 正如您在 3 上看到的 一些数字下降到基线以下 我想要实现的是 这些数字不会低于该线 并且看起来像这样 在 Word 中 可以在相同字体的字符设置中轻松设置 如何在 TCPDF 中呈现数字 我
  • Facebook Graph API v3.1 开发人员访问令牌权限限制

    如您所知 Facebook 将其 API 升级到了 V3 1 现在正在慢慢地淘汰旧的 API 和应用程序 因此我们必须迁移到新的 API 他们做出了一些艰难的决定 这对垃圾邮件网站来说是好事 但对开发人员来说也很难 提醒 Graph API
  • 通过 AJAX 发送 XML

    我在 jQuery 中创建了一个 xml 文档 如下所示 var xmlDocument
  • 如何在无法重启的服务器(Apache)上使用gettext?

    我在服务器故障上问了这个问题 https serverfault com questions 104224 how do you use gettext on server apache you cant restart但我没有得到任何回应
  • Twig:选择某些块并渲染它们

    我正在将 twig 模板引擎集成到 PHP 应用程序中 特别是 我想使用 twig 引擎来渲染表单 了解了 symfony2 如何使用 twig 渲染表单小部件后 他们有一个巨大的模板文件 其中包含所有小部件 如下所示 block pass
  • 如何在 Laravel 代码中使用 Artisan 命令?

    如何在我的 php caode Ex 中使用 Artisan 命令行 php artisan version to 您可以从控制器调用 Artisan 命令 如下所示 calling of migrate install Artisan c
  • 从数据库 MYSQL 和 Codeigniter 获取信息

    如果你们需要其他信息 上一个问题就在这里 从数据库中获取信息 https stackoverflow com questions 13336744 fetching information from the database 另一个更新 尽
  • PHP 时间间隔

    我正在寻找一个看起来应该非常简单的解决方案 但似乎我不能在这里找到任何好的答案 而且我自己似乎无法让它发挥作用 我正在寻找的是设置开始时间 结束时间 然后迭代给定时间间隔之间的一组时间 例如 上午 9 00 下午 5 00 是开始时间 这些
  • 通过ajax执行后期操作时如何克服CORS重定向问题?

    我可以通过外部登录表单中的 post 方法类型提交表单来登录 roundcube 实例 托管在另一台服务器上 我收到此错误 通过 ajax 签名时 XMLHttpRequest 无法加载https 192 168 0 7 mail http
  • 与 array_intersect 相反?

    是否有一个内置函数可以获取数组 1 中不存在于数组 2 中的所有成员 我知道如何以编程方式执行此操作 只是想知道是否有一个内置函数可以执行相同的操作 所以请不要提供代码示例 这听起来像是一份工作array diff http www php
  • PHP简单的html dom解析器与wordpress冲突吗?

    PHP简单的html dom解析器与wordpress冲突吗 因为每当我尝试将其与此代码一起包含在我的标头中时 一切都变成空白 感谢您提前提供任何帮助 当我尝试在 HTML 文档中使用 PHP 包含时 我遇到了同样的问题 但当我使用func

随机推荐

  • QML TableView 使用 QtQuick.Controls 2 单击行

    我在网上搜索了很多 但没有找到答案 这真的很奇怪 因为我认为这是大多数人应该使用的基本功能 可能我不明白如何正确使用表格视图 with QtQuick Controls 2 问题是 我想知道我单击了哪一行 并且我想访问该行的特定列的数据 类
  • Gmail 应用程序中的表格间隙未跨越整个宽度和高度

    经过几天的尝试寻找解决方案 未成功 我决定向社区的集体智慧和经验寻求帮助 我 我有一个电子邮件模板 可以在所有桌面 网络和移动客户端 Android 版 Gmail 应用程序除外 上正确显示 我有一个嵌套的导航表 由顶部图像 导航本身和底部
  • 如何在 pandas 中将多列折叠为一列

    我有一个填充了用户和类别的 pandas 数据框 但这些类别有多个列 user category val1 val2 val3 user 1 c1 3 NA None user 1 c2 NA 4 None user 1 c3 NA NA
  • 正则表达式仅匹配最里面的分隔序列

    我有一个包含由多个字符分隔的序列的字符串 lt lt and gt gt 我需要一个正则表达式来只给我最里面的序列 我已经尝试过前瞻 但它们似乎没有按照我期望的方式工作 这是一个测试字符串 do not match this lt
  • SSRS 2012 图表未渲染 [关闭]

    Closed 这个问题是无关 目前不接受答案 我们最近升级到 SQL Server 2012 几天前重新启动后 所有图表都停止工作 当我尝试从报告查看器控件中查看各种报告中的所有图表时 它们现在都显示为损坏的图像 左上角有一个红色 x 这种
  • 如何将元组的值转发到成员初始值设定项?

    我需要将元组的值转发到成员初始值设定项 struct Struct Member1 member1 Member2 member2 template
  • 如何在 Openshift 中使用简单的 npm-install?

    我正在尝试在我的 openshift 帐户上使用可爱文件 https www npmjs com package cute files 我知道 node js 的工作方式与我在 localhost 3000 中所做的一样 但不是那么专家 我
  • C中unsigned和unsigned int的区别

    您能说清楚两者之间的区别吗unsigned and unsigned int 也许一些示例代码会有所帮助 unsigned是一个修饰符 可以应用于任何整型 char short int long等 但就其本身而言 它与unsigned in
  • int64_t 的定义

    我是 C C 新手 所以我有几个关于基本类型的问题 a 你能向我解释一下两者之间的区别吗int64 t and long long int 根据我的理解 两者都是 64 位整数 有什么理由选择其中之一而不是其他吗 b 我试图查找定义int6
  • Spring AOP引入中原有接口丢失

    这是我的 Spring AOP 配置
  • 在 R 中绘图时图例消失

    我绘制了五个图表和一个图例 这些图表工作得很好 但是图例消失了而没有错误 我在 RStudio 中的预览如下所示 当我放大时 图例所在的区域是空白的 我使用以下代码 opar lt par no readonly TRUE par mfro
  • \377\376 附加到文件(Windows -> Unix)

    我有一个SSIS执行以下操作的包 运行 SQL 脚本 将结果导出到平面文件 UTF 8编码 分隔 并且 n对于新线路 FTP 结果到Solaris机器 二进制格式 问题是 当文件出现在我的 Solaris 机器上时 文件开头有以下内容 37
  • 如何动态创建局部变量?

    我有一个变量var some name 我想创建一个新对象并将其分配给some name 我该怎么做 例如 var some name some name Struct new name I need this a some name ne
  • oracle中使用seq和trigger自动增量-无效的sql语句

    我是 Oracle 的新手 来自 MySQL 我试图使用序列和触发器在 Oracle 中使用自动增量 以便每次插入时它都会将我的字段增加一 CREATE SEQUENCE proposals seq MINVALUE 1 START WIT
  • 如何打开多个窗口或操作多个实例

    如果出于某种疯狂的原因 我需要打开 100 个窗口 选项卡并导航到其中的 100 个不同的链接 我该怎么做 我可以同时在所有 100 个测试中运行某些测试吗 假设我有一个数组 a b c d e 我需要测试某种形式是否适用于所有这些值 我怎
  • QQuickWidget抓取图像

    我正在保存一个图像QQuickWidget有几个 QML 孩子 但我只有一张空白图像 C 方面 QQuickWidget content content gt setSource QUrl qml main qml QPixmap pm c
  • Sequential Guid 主键列应该是聚集索引吗?

    使用顺序 guid 的目标是 您可以使用聚集索引 而不会产生高级别碎片 如果它是常规 guid 那么聚集索引中通常会存在这种情况 对吗 首先澄清一下 主键和聚集索引是两个独立且不同的东西 即一个不与另一个耦合 PK 可以是非聚集的 聚集索引
  • 在g++编译器中使用strlen获取数组的长度

    有人可以解释为什么当我使用以下 g 编译器编译源代码时出现此错误 include
  • 降低 OpenCV 中的图像分辨率

    我正在使用 OpenCV 从 A4Tech 相机捕获图像 当我尝试降低图像分辨率时 图像断言失败 CvCapture camera cvCreateCameraCapture 1 0 is index of Laptop integrate
  • PHP:格式化时间 Stackoverflow 或 Apple Mail 风格

    有这个php net 文档中的非常好的功能使您能够以 Facebook 风格的方式格式化时间 例如 2 minutes ago 4 weeks ago or 3 years ago 不过 我更喜欢 Stackoverflow 和 Apple