1

可能かどうかはわかりませんが、ループを使用してデータベースに入力されるため、各ユーザーに異なる日付を割り当てようとしています (ビットが可能であることはわかっています)。これを行うために、mktime() を使用してタイムスタンプを作成していますが、私の列は (MySQL ORDERBY タイムスタンプ DESC の目的で) datetime であり、当然のことながら、この 2 つは一致しません。

私のコード:

<?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))。データベースの挿入にはこれで十分なので、DateTime使用をやめて使用に固執することもできます。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() コンストラクターには、2 つのオプションのパラメーターがあります。時刻を表す文字列とタイム ゾーンを表す文字列 - DateTime __construct リファレンスを参照してください。

于 2012-02-01T21:25:10.863 に答える
0

すでにデータ型FROM_UNIXTIMEを使用しているので、日付の文字列表現を機能させるために渡さなければならない理由がわかりません。パラメータはunsignedintであるため、評価結果は1970年であり、エポックの開始に相当します。DATETIMEFROM_UNIXTIME

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 に答える
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 に答える