sql >> データベース >  >> RDS >> Mysql

PHPを使用してJavascript時間をMySQL形式に変換する

    日付文字列にはすでにタイムゾーンが含まれているため、特別なことをする必要はありません。

    $when = new DateTime('Sun Jul 13 2014 07:00:00 GMT+0200 (EET)');
    echo $when->format('Y-m-d H:i:s');
    

    コメントで役立つように、この文字列には実際には2ビットのタイムゾーン情報 UTC + 2 が含まれています。 およびEET (東ヨーロッパ時間)、そしてPHPは基本的に2番目のものを無視しています。この例では、より適切に発見されています:

    var_dump(new DateTime('Sun Jul 13 2014 07:00:00 GMT+0200 (EET)'), DateTime::getLastErrors());
    var_dump(new DateTime('Sun Jul 13 2014 07:00:00 GMT+0200'), DateTime::getLastErrors());
    var_dump(new DateTime('Sun Jul 13 2014 07:00:00 (EET)'), DateTime::getLastErrors());
    
    object(DateTime)#1 (3) {
      ["date"]=>
      string(26) "2014-07-13 07:00:00.000000"
      ["timezone_type"]=>
      int(1)
      ["timezone"]=>
      string(6) "+02:00"
    }
    array(4) {
      ["warning_count"]=>
      int(1)
      ["warnings"]=>
      array(1) {
        [34]=>
        string(29) "Double timezone specification"
      }
      ["error_count"]=>
      int(0)
      ["errors"]=>
      array(0) {
      }
    }
    object(DateTime)#1 (3) {
      ["date"]=>
      string(26) "2014-07-13 07:00:00.000000"
      ["timezone_type"]=>
      int(1)
      ["timezone"]=>
      string(6) "+02:00"
    }
    array(4) {
      ["warning_count"]=>
      int(0)
      ["warnings"]=>
      array(0) {
      }
      ["error_count"]=>
      int(0)
      ["errors"]=>
      array(0) {
      }
    }
    object(DateTime)#1 (3) {
      ["date"]=>
      string(26) "2014-07-13 07:00:00.000000"
      ["timezone_type"]=>
      int(2)
      ["timezone"]=>
      string(3) "EET"
    }
    array(4) {
      ["warning_count"]=>
      int(0)
      ["warnings"]=>
      array(0) {
      }
      ["error_count"]=>
      int(0)
      ["errors"]=>
      array(0) {
      }
    }
    

    実際、そのうちの1つを削除する必要があります。例:

    $js_date_string = 'Sun Jul 13 2014 07:00:00 GMT+0200 (EET)';
    // Regular expression is shown for illustration purposes, it's probably wrong!
    $tmp_date_string = preg_replace('/ GMT\+\d{4}/ui', '', $js_date_string);
    
    $when = new DateTime($tmp_date_string);
    var_dump($when, DateTime::getLastErrors());
    echo $when->format('Y-m-d H:i:s');
    
    object(DateTime)#1 (3) {
      ["date"]=>
      string(26) "2014-07-13 07:00:00.000000"
      ["timezone_type"]=>
      int(2)
      ["timezone"]=>
      string(3) "EET"
    }
    array(4) {
      ["warning_count"]=>
      int(0)
      ["warnings"]=>
      array(0) {
      }
      ["error_count"]=>
      int(0)
      ["errors"]=>
      array(0) {
      }
    }
    2014-07-13 07:00:00
    


    1. PythonからリモートサーバーのMySQLに接続する

    2. 年だけがわかる日付を保存する

    3. php7.4mysqliが消えてタイムアウトします

    4. Oracleの動的SQL内の並列ヒントは並列で実行されますか?