0

我正在尝试获取 UNIX 时间戳并使用 PHP 将其转换为字符串。考虑到 PHP 的内置函数,这很容易,但是我有一组特定的要求,这让我有些困惑。

逻辑应该如下:

  • 如果时间戳是今天 - 返回today
  • 如果时间戳昨天发生 - 返回yesterday
  • 如果时间戳早于昨天但本周仍返回day name(星期四、星期二等)
  • 如果时间戳发生在上周 - 返回last week
  • 如果时间戳早于上周 - 返回Month and Year(格式为 2013 年 6 月、2011 年 1 月等)

这从一开始就显得很简单,但由于某种原因,我的大脑对这件事感到困惑。

请注意: 我不想要基于纯算术的解决方案,因为现代日历系统非常复杂,为了准确,我想使用内置的时间函数来解决这个问题。strtotime()date()

提前致谢

编辑:到目前为止我使用的逻辑的初始部分如下。当然,这只会today在时间戳为今天时返回。我需要扩展它以考虑其他要求。也许使用strtotime

public function getTimeChange($timestamp)
{
            $today = date('Ymd');
            $date = date(Ymd', $timestamp);


            if($date == $today){
                return 'today';
            }
}
4

2 回答 2

1

像这样的东西:

$date = date_create("@{$timestamp}");

// date_create() == new DateTime()
if($date < date_create('last week')){
  return $date->format('M Y');

}elseif($date < date_create('this week')){
  return 'Last week';

}elseif($date < date_create('yesterday')){
  return $date->format('l');

}elseif($date < date_create('today')){
  return 'Yesterday';

}else{
  return 'Today or future date';
}

(可以比较 DateTime 对象)

但是你不应该再对日期使用时间戳,因为它们的范围有限。选择标准日期格式并将它们存储为字符串...

于 2013-06-20T13:57:53.720 回答
0

...为了准确性,我想使用内置的时间函数...

至少“上周是不是上周”的问题取决于太多设置(一周中的第一天,ISO 日期与否,DST 与否……),为了准确起见,您最好不要依赖内置的 PHP 日历功能。

我不知道到底是谁在Amsterdam/BerlinPHP 中将时区名称设置为例如“”,而有CET可用的 ISO 标准等。处理这个实际上是皮塔。

于 2013-06-20T13:54:20.153 回答