我不知道这是否可能,但当使用循环将输入数据库时,我正在尝试为每个用户分配不同的日期(我知道这是可能的)。为了做到这一点,我使用mktime()构建时间戳,但我的列是datetime(出于MySQL ORDERBY时间戳DESC的目的),自然,这两者不在一起。
我的代码:
<?php
foreach($arr as $user_uid => $num) {
$i = 1;
while($num > 0) {
$i++;
$t = new DateTime("Y-m-d H:i:s", date(mktime(0, 0, 0, $i, 1, 2012)));
$num--;
}
}
?>
此时返回:0000-00-00 00:00:00。
任何帮助都将不胜感激,谢谢!
编辑:金额发生了变化,我的代码现在是这样的:
foreach($arr as $user_uid => $num) {
$i = 1;
while($num > 0) {
$i++;
$t = date('Y-m-d H:i:s', mktime(0, 0, 0, $i, 1, 2012));
$num--;
}
$game = "INSERT INTO wd_game_$gid (game_uid,user_uid,lastmove,startcountry,money) VALUES ('$gid','$user_uid',FROM_UNIXTIME('$t'),'$rand_c','$money')";
现在插入:1970-01-01 00:00:00
解决方案1-在数据库层上使用FROM_UNIXTIME()
您可以使用FROM_UNIXTIME()
函数在数据库端执行此操作(参数是Unix epoch时间戳,因此这与mktime()
的结果相同)。
解决方案2-修复当前代码
此外,您的代码也是不正确的,因为您将不正确的日期传递给了DateTime
构造函数(请参阅文档)。传递"Y-m-d H:i:s"
而不是date('Y-m-d H:i:s', mktime(0, 0, 0, $i, 1, 2012))
。您甚至可以放弃使用DateTime
,而只使用date('Y-m-d H:i:s', mktime(0, 0, 0, $i, 1, 2012))
,因为这对于您的数据库插入来说已经足够了。
我认为你的方法不太正确。尝试:
foreach($arr as $user_uid => $num) {
$i = 1;
while($num > 0) {
$i++;
$t = date("Y-m-d H:i:s", mktime(0, 0, 0, $i, 1, 2012));
$num--;
}
}
DateTime()构造函数有两个可选参数。一个表示时间的字符串和一个表示时区的字符串-请参阅DateTime__construct引用
应该是
$t = new DateTime(date("Y-m-d H:i:s", mktime(0, 0, 0, $i, 1, 2012)));
(格式字符串是date
的第一个参数)
EDIT:正如我在评论中所说,不要将phpDateTime类与MySQL DateTime数据类型混淆。
你可以这样做:
$t = mktime(0, 0, 0, $i, 1, 2012); // $t contains now a unix timestamp
// ...
$game = "INSERT INTO wd_game_$gid (game_uid,user_uid,lastmove,startcountry,money) VALUES ".
"('$gid','$user_uid',FROM_UNIXTIME($t),'$rand_c','$money')";
或者这个:
$t = date("Y-m-d H:i:s", mktime(0, 0, 0, $i, 1, 2012));
// $t contains a textual representation of MySQL DATETIME value
// ...
$game = "INSERT INTO wd_game_$gid (game_uid,user_uid,lastmove,startcountry,money) VALUES ".
"('$gid','$user_uid','$t','$rand_c','$money')";
我不明白为什么您必须将日期的字符串表示传递给FROM_UNIXTIME
函数,因为您已经使用了DATETIME
数据类型。FROM_UNIXTIME
参数为无符号整数,因此评估结果1970为年份,相当于历元的开始
foreach($arr as $user_uid => $num) {
$i = 1;
while($num > 0) {
$i++;
$t = date('Y-m-d H:i:s', mktime(0, 0, 0, $i, 1, 2012));
$num--;
}
$game = "INSERT INTO wd_game_$gid (game_uid,user_uid,lastmove,startcountry,money) VALUES ('$gid','$user_uid','$t','$rand_c','$money')";