我正在使用我发现的功能,但我正在尝试使用GMT utc时间戳:
编辑: 也许我的问题在于如何将用户输入时间“转换”为GMT ......
我在做
$the_user_input_date = strtotime('2011-07-20T01:13:00');
$utctime = gmdate('Y-m-d H:i:s',$the_user_input_date);
gmdate('Y-m-d H:i:s',$the_user_input_date);
实际上没有将其“转换”为gmt吗?它只是格式化吗?也许这就是我的问题。
以下是我可以提供的时间:
//local time in GMT
2011-07-20T01:13:00
//future time in GMT
2011-07-20T19:49:39
我正试图让它像以下一样工作:
Started 36 mins ago
Will start in 33 mins
Will start in 6 hrs 21 mins
Will start in 4 days 4 hrs 33 mins
到目前为止,我正在使用的是:
EDIT: new php code im working with, seems to ADD 10 HOURS on to my date. Any ideas? I updated it here:
function ago($from)
{
$to = time();
$to = (($to === null) ? (time()) : ($to));
$to = ((is_int($to)) ? ($to) : (strtotime($to)));
$from = ((is_int($from)) ? ($from) : (strtotime($from)));
$units = array
(
"year" => 29030400, // seconds in a year (12 months)
"month" => 2419200, // seconds in a month (4 weeks)
"week" => 604800, // seconds in a week (7 days)
"day" => 86400, // seconds in a day (24 hours)
"hour" => 3600, // seconds in an hour (60 minutes)
"minute" => 60, // seconds in a minute (60 seconds)
"second" => 1 // 1 second
);
$diff = abs($from - $to);
$suffix = (($from > $to) ? ("from now") : ("ago"));
foreach($units as $unit => $mult)
if($diff >= $mult)
{
$and = (($mult != 1) ? ("") : ("and "));
$output .= ", ".$and.intval($diff / $mult)." ".$unit.((intval($diff / $mult) == 1) ? ("") : ("s"));
$diff -= intval($diff / $mult) * $mult;
}
$output .= " ".$suffix;
$output = substr($output, strlen(", "));
return $output;
}
@Jason
我尝试了你在这里建议的内容:
function ago($dateto)
{
$datetime1 = new DateTime( $dateto);
$datetime2 = new DateTime();
$interval = $datetime1->diff($datetime2);
// print_r($interval);
$format = '';
if ($interval->h) {
$format .= ' %h ' . ($interval->h == 1 ? 'hour' : 'hours');
}
if ($interval->i) {
$format .= ' %i ' . ($interval->i == 1 ? 'minute' : 'minutes');
}
// more logic for each interval
if ($format) {
echo $interval->format($format), ' ago';
}
else {
echo 'now';
}
}
似乎总是增加10个小时到我的时间。
任何想法可能会发生什么?
也许错误在于我如何节省目标时间? 当有人提交转换并存储的时间时,就像这样
用户提交的时间总是看起来像当地时间一样: 07/20/2011 11:00 pm
然后:
$time = mysql_real_escape_string($_POST['time']);
$the_date = strtotime($time);
//make user input time into GMT time
$utctime = gmdate('Y/m/d H:i:s',$the_date);
$query = "INSERT INTO $table (time) VALUES ('$utctime');";
mysql_query($query);
答案 0 :(得分:2)
如果您可以访问PHP> = 5.3,我建议DateTime::diff()
。返回的DateInterval
为您提供了显示所需的所有部分,并且有自己的方法,例如format()
。
这是一个给你一个想法的例子。 PHP文档链接的注释中有更完整的示例。
<?php
$datetime1 = new DateTime('2011-07-20');
$datetime2 = new DateTime();
$interval = $datetime1->diff($datetime2);
// print_r($interval);
$format = '';
if ($interval->h) {
$format .= ' %h ' . ($interval->h == 1 ? 'hour' : 'hours');
}
if ($interval->i) {
$format .= ' %i ' . ($interval->i == 1 ? 'minute' : 'minutes');
}
// more logic for each interval
if ($format) {
echo $interval->format($format), ' ago';
}
else {
echo 'now';
}
输出(在我的系统上):
22小时10分钟前
答案 1 :(得分:0)
您的$datefrom
是一个字符串,但$dateto
是一个整数。你不能这样减去它们。
而不是:
$datefrom=gmdate("Y/m/d\TH:i:s\Z");
执行:
$datefrom=time();
PS。我没有检查剩下的代码。