1

我不知道这是否可能,但我正在尝试为每个用户分配不同的日期,因为它们是使用循环输入数据库的(我知道那一点是可能的)。为此,我正在使用 mktime() 构建时间戳,但我的列是日期时间(用于 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

4

4 回答 4

3

解决方案 1 -FROM_UNIXTIME()在数据库层上使用

您可以使用函数在数据库端执行此操作FROM_UNIXTIME()(参数是 Unix 纪元时间戳,因此这与您的结果相同mktime())。

解决方案 2 - 修复您当前的代码

您的代码也不正确,因为您将错误的日期传递给DateTime构造函数(请参阅文档)。你通过"Y-m-d H:i:s"而不是date('Y-m-d H:i:s', mktime(0, 0, 0, $i, 1, 2012)). 您甚至可以退出 usingDateTime并坚持使用 using date('Y-m-d H:i:s', mktime(0, 0, 0, $i, 1, 2012)),因为这对于您的数据库插入来说已经足够了。

于 2012-02-01T21:27:26.960 回答
1

我不认为你的方法不太正确。尝试:

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 参考

于 2012-02-01T21:25:10.863 回答
0

应该

$t = new DateTime(date("Y-m-d H:i:s", mktime(0, 0, 0, $i, 1, 2012)));

(格式字符串是 的第一个参数date


编辑:正如我在评论中所说,不要将php DateTime 类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')";
于 2012-02-01T21:21:27.070 回答
0

我不明白为什么你必须传递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')";
于 2012-02-01T22:30:35.320 回答