Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用将php Time()写入mysql_Php_Function_Time - Fatal编程技术网

使用将php Time()写入mysql

使用将php Time()写入mysql,php,function,time,Php,Function,Time,我想记录用户发布消息的时间,并以类似Twitter的方式显示它 我发现有一个函数可以这样做,但它不适用于mysqls时间戳类型 在说明中,它说它使用time()格式来计算它。我应该如何将时间写入我的数据库以便它工作 代码如下: function newTime($tm,$rcs = 0) { // http://snipplr.com/view/17338/ $cur_tm = time(); $dif = $cur_tm-$tm; $pds = array('secon

我想记录用户发布消息的时间,并以类似Twitter的方式显示它

我发现有一个函数可以这样做,但它不适用于mysqls时间戳类型

在说明中,它说它使用time()格式来计算它。我应该如何将时间写入我的数据库以便它工作

代码如下:

function newTime($tm,$rcs = 0) {
    // http://snipplr.com/view/17338/
    $cur_tm = time(); $dif = $cur_tm-$tm;
    $pds = array('second','minute','hour','day','week','month','year','decade');
    $lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600);
    for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = $cur_tm-($dif%$lngh[$v]);
    $no = floor($no); if($no <> 1) $pds[$v] .='s'; $x=sprintf("%d %s ",$no,$pds[$v]);
    if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0)) $x .= time_ago($_tm);
    return $x."ago";
}
函数newTime($tm,$rcs=0){
// http://snipplr.com/view/17338/
$cur_tm=time();$dif=$cur_tm-$tm;
$pds=数组('second'、'minute'、'hour'、'day'、'week'、'month'、'year'、'decade');
$lngh=阵列(1,6036008640060480026308031570560315705600);
对于($v=sizeof($lngh)-1;($v>=0)和($no=$dif/$lngh[$v])=1)和($cur_tm-$\u tm)>0))$x.=时间($\u tm);
返回$x.“之前”;
}

我拒绝尝试从那该死的混乱中解释清楚:)仍然大声大笑

但是,如果您想将时间戳导入mySQL DATETIME字段(我认为这正是您想要的),您可以使用:

决议如下:

做过

$posttime=time()


插入tablename(fieldname)值($posttime))

如果您只想将实际时间戳保存到数据库中,您可以使用mysql函数NOW()来实现:

INSERT INTO tablename SET timefieldname = NOW():
您可以从数据库中读取该时间戳,并使用该函数将差异转换为类似“30分钟前”的内容。

或者,如果您希望MySQL(而不是您的代码)调用C库函数(time)time(),请查看MySQL函数UNIX_timestamp(),作为从UNIXTIME()给出参数的一种方式


UNIX_TIMESTAMP()的返回值完全符合整数(10)字段

你为什么要删除“当我看到那个代码时我笑了”,这是100%正确的。@Lekensteyn我删除了它,因为我决定回答。是 啊我也还在笑:)@user你可以编辑你原来的问题,而不是发布答案。@user你知道这将在数据库中存储UNIX时间戳,而不是datetime值吗?你可能会发现这很有用:-
对于($v=sizeof($lngh)-1[…])
?为什么不简单地使用count()?-你的函数被称为
newTime()
,但您递归地在代码路径中将其称为
time\u ago()
…甚至不考虑单行语法和wird条件,我不知道它们在做什么..这似乎是用C风格的语法编写的,您确定这段代码真的有效吗?:)您是否在一个单独的案例中进行了测试?这将是处理此问题的方式
INSERT INTO tablename SET timefieldname = NOW():