转换2010-04-16 16:30:00到“明天下午”

时间:2010-04-15 06:11:35

标签: php javascript date formatting

将2010-04-16 16:30:00转换为“明天下午”或将另一个日期转换为“今天下午”,“明年”,“下周三周三”。你得到了照片。 有人知道可以做到这一点的PHP或Javascript库吗?

4 个答案:

答案 0 :(得分:4)

我认为你可以对这里所说的内容走得很远:Calculate relative time in C#
逻辑是存在的,如果用不同语言的解决方案适合你,那么做javascript等效并不难。

答案 1 :(得分:1)

可能有更优雅的解决方案(寻找自然语言格式),但我个人无法找到任何。

我建议计算从now到您格式化日期的距离,并使用阈值。

伪解决方案:

diff = now - date

if (diff < one_day) 
    format for today
if (diff < two_days) 
    format for tomorrow
if (diff < one_week)
    format using days from now
.
.
.

只要您使用与abs diff的值进行比较,该比较将适用于过去和将来的日期。通过检查diff是正还是负,显示时间单位前或时间单位。

对于早晨,下午,晚上等,您只需要检查日期中的时间,并且关于您点击的格式类型,或者将时间显示为数字(远处)或自然语言(最近或近日期。)

答案 2 :(得分:0)

从此链接 - &gt; How do I calculate relative time?

function posted(t) { 
var now = new Date(); 
var diff = parseInt((now.getTime() - Date.parse(t)) / 1000); 
if (diff < 60) { return 'less than a minute ago'; } 
else if (diff < 120) { return 'about a minute ago'; } 
else if (diff < (2700)) { return (parseInt(diff / 60)).toString() + ' minutes ago'; } 
else if (diff < (5400)) { return 'about an hour ago'; } 
else if (diff < (86400)) { return 'about ' + (parseInt(diff / 3600)).toString() + ' hours ago'; } 
else if (diff < (172800)) { return '1 day ago'; }  
else {return (parseInt(diff / 86400)).toString() + ' days ago'; } 

}

答案 3 :(得分:0)

                   function gett($sam){
                   $times = time() - $sam;
                    if ($times == 60){
                    $times = "a minute ago";
                    }
        if (($times != 1) && ($times < 60) && ($times != 0)){
        $times = "$times seconds ago";
        }
        if ($times == 0){
        $times = "less than a second ago";
        }
        if ($times == 1){
        $times = "a second ago";
        }

        if ($times > 60 && $times < 3600){
        $times = ceil($times/60)." minutes ago";
        }

        if($times == 3600){
        $times = "an hour ago";
        }
        if($times > 3600 && $times < 86400){
        $times = ceil($times/3600)." hours ago";
        }
        if($times == 86400){
        $times = "a day ago";
        }
        if($times > 86400){
        $times = ceil($times/86400)." days ago";
        }
        return $times; }

使用方法: $ updated = gett($ timestamp); 其中$ timestamp非常明显。