讓日期變的口語化?

想問一下
我用php time()去製造日期並用 date()顯示

以今天為主:
可能明天的日期會是2017-01-15
就直接顯示2017-01-15

但是否可以改成顯示[明天]?
以及若是2017-01-17
改成顯示[下禮拜二]?

以及若今天是01-17日
而日期若是2017-01-21時
改成顯示[這禮拜六]?

阅读 2.9k
4 个回答
public function date_encode($date="2017-01-23")
{
    $sNow = time();
    $sData = strtotime($date);
    $sDate_1 = date('z',$sNow);
    $sDate_2 = date('z',$sData);
    $sWeek_1 = date('W',$sNow);
    $sWeek_2 = date('W',$sData);
    $sWeek = $sWeek_2-$sWeek_1;
    $aWeek = array(
        -1 => '上',
        1 => '下',
    );
    $aDay = array(
        1=>'周一',
        2=>'周二',
        3=>'周三',
        4=>'周四',
        5=>'周五',
        6=>'周六',
        7=>'周日',
    );

    $aTmp = array(
        -6 => '6天前',
        -5 => '5天前',
        -4 => '4天前',
        -3 => '大前天',
        -2 => '前天',
        -1 => '昨天',
        0 =>'今天',
        1 =>'明天',
        2 =>'后天',
        3 =>'大后天',
        4 =>'4天后',
        5 =>'5天后',
        6 =>'6天后',
    );
    $sResult = $sDate_2-$sDate_1;

    if(in_array($sWeek, array_keys($aWeek))){
        return $aWeek[$sWeek].$aDay[date('N',$sData)];
    } elseif(in_array($sResult, array_keys($aTmp))) {
        return $aTmp[$sResult];
    } else {
        return $date;
    }
}

自己写了个,比较蠢,不过效果应该和你说的差不多

不记得有原生函数实现,建议自己写个函数吧。
请参考:
date("Y-m-d",strtotime("+N day"));//获取N天后的时间,然后你判断去吧
date("Ymd", strtotime("2007-11-01")+10243600);//同上

我大概这样一想,等大神支招

比方说$week=date("w")可以判断今天周几,然后你要判断周二,就有好几种情况
1.刚好是周二,$week=2;
2.大于周二,也就是周三、周四、周五、周六,$week=3,4,5,6
3.小于周二,也就是周日、周一,$week=0,1

字符串型直接strtotime,就是数字型了,可以直接加减,大于的时候减去3600*24*多少天,小于的话直接加上


按照你的需求,如果说明天后天,用今天为基点,如果下礼拜的话,先把下礼拜一算出来,用礼拜一作为基点,其他的一直加下去就是了
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题