【发布时间】:2011-02-08 05:51:24
【问题描述】:
将 2010-04-16 16:30:00 转换为“明天下午”或将另一个日期转换为“今天下午”、“明年”、“下周星期三”。你得到图片。 有人知道可以做到这一点的 PHP 或 Javascript 库吗?
【问题讨论】:
标签: php javascript date formatting
将 2010-04-16 16:30:00 转换为“明天下午”或将另一个日期转换为“今天下午”、“明年”、“下周星期三”。你得到图片。 有人知道可以做到这一点的 PHP 或 Javascript 库吗?
【问题讨论】:
标签: php javascript date formatting
我认为您可以通过这里所说的内容取得长足进步:Calculate relative time in C#
逻辑就在那里,如果其他语言的解决方案适合您,那么做 javascript 等效项并不难。
【讨论】:
可能有更优雅的解决方案(寻找自然语言格式),但我个人找不到任何解决方案。
我建议计算从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 是正数还是负数来显示 timeunit ago 或 timeunit from now。
对于早上、下午、晚上等,您只需要检查日期中的时间,对于您点击的格式类型,将时间显示为数字(远)或自然语言(最近或临近日期)。
【讨论】:
diff = date - now,这比这要复杂一些,因为明天可能还有不到一天的差异。
diff的绝对值即可。但否则你是正确的,要比较的日期应该是阈值日期的午夜时间戳。
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 是不言自明的......
【讨论】:
从此链接-> How do I calculate relative time in C#?
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'; }
}
【讨论】: