【问题标题】:Convert Javascript time to MySQL format using PHP使用 PHP 将 Javascript 时间转换为 MySQL 格式
【发布时间】:2014-09-03 01:18:13
【问题描述】:

如何使用 php 将 js 日期(如 Sun Jul 13 2014 07:00:00 GMT+0200 (EET))转换为 MySQL 格式(如 2014-07-13 07:00:00)?

【问题讨论】:

    标签: javascript php mysql timestamp


    【解决方案1】:

    由于您的日期字符串已经包含时区,您不需要做任何特别的事情:

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

    正如在 cmets 中有用地指出的那样,这个字符串实际上包含两位时区信息,UTC + 2EET(东欧时间),PHP 基本上忽略了第二个。在此示例中可以更好地发现:

    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) {
      }
    }
    

    我们实际上需要剥离其中一个,例如:

    $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
    

    【讨论】:

    • 谢谢。像魅力一样工作。
    • 我猜这对柏林不起作用。那是我的 js 日期:Mon May 04 2020 00:00:00 GMT+0200 (Central European Summer Time)。尝试创建新的DateTime 时收到错误Double timezone specification
    • @Adam 这可能是错误消息所说的:你有两个时区。他们在一年中的一半时间相同并不会改变这一点。如果加几个月呢?您希望结果为 UTC+2 还是 CEST?
    • @ÁlvaroGonzález 目前他们是一样的,我猜下半年js会打印GMT+0100 (Central European Summer Time)。在您的示例中,该字符串也有两个时区GMT+0200EET,但这出于某种原因。
    • @Adam 啊,抱歉,我没有注意到。有趣...在问题的示例中,PHP 实际上忽略了 EET 部分。也许我们只是在解析器的代码中遇到了一个漏洞。
    【解决方案2】:

    我会尽量加强@akuzminsky 的回答。由于date_parse在内部使用strtotime来解析日期,所以你可以直接使用它,让你的代码更加灵活。

    有一个小缺点,因为您需要设置时区才能正确使用date 并避免 php 警告。我将它设置为Europe/Athens,但你可以找到here所有可用的代码。

    date_default_timezone_set("Europe/Athens");
    
    $unixTimeStamp = strtotime("Sun Jul 13 2014 07:00:00 GMT+0200 (EET)");
    $newFormat = date('Y-m-d H:i:s', $unixTimeStamp );
    
    echo $newFormat;
    

    【讨论】:

      【解决方案3】:

      Javascript: 现在可以在几秒钟内获得这个时间。除以 1000 消除毫秒数

      var time = new Date().getTime() / 1000
      

      PHP:使用JS返回的时间,整数值

      $time = gmdate('H:i:s', time)
      

      【讨论】:

        【解决方案4】:
        <?php
        print_r(date_parse("Sun Jul 13 2014 07:00:00 GMT+0200"));
        ?>
        
        
        Array
        (
        [year] => 2014
        [month] => 7
        [day] => 13
        [hour] => 7
        [minute] => 0
        [second] => 0
        [fraction] => 0
        [warning_count] => 0
        [warnings] => Array
            (
            )
        
        [error_count] => 0
        [errors] => Array
            (
            )
        
        [is_localtime] => 1
        [zone_type] => 1
        [zone] => -120
        [is_dst] =>
        [relative] => Array
            (
                [year] => 0
                [month] => 0
                [day] => 0
                [hour] => 0
                [minute] => 0
                [second] => 0
                [weekday] => 0
            )
        
        )
        

        【讨论】:

          猜你喜欢
          • 2015-09-08
          • 1970-01-01
          • 1970-01-01
          • 2014-12-02
          • 2012-07-04
          • 2011-03-05
          • 2014-06-10
          • 1970-01-01
          • 2016-06-07
          相关资源
          最近更新 更多