将JavaScript new Date()转换为php DateTime()

Sui*_*sse 5 javascript php datetime date

我在HTML中有2个字段:

<input id="datum" type="date">
<input id="uhrzeit" type="time">
Run Code Online (Sandbox Code Playgroud)

JavaScript:

var datumUhrzeit = new Date($("#datum").val()+","+$("#uhrzeit").val());
console.log(datumuhrzeit);

 "Tue Aug 18 2015 16:45:00 GMT+0200 (Mitteleuropäische Sommerzeit)"
Run Code Online (Sandbox Code Playgroud)

如何将PHP中的“ Tue Aug 18 2015 16:45:00 GMT + 0200(MitteleuropäischeSommerzeit)”转换为DateTime,以便将其保存到postgresql?

Sky*_*dda 7

您可以按如下方式从 Date 对象获取 unix 时间戳(请参阅 Date.prototype.getTime

var timestamp = '@' + Math.round(datumUhrzeit.getTime()/1000);
Run Code Online (Sandbox Code Playgroud)

然后在服务器上发送时只需创建新的日期时间对象

$datumUhrzeit = new DateTime($timestamp);
Run Code Online (Sandbox Code Playgroud)

如果您不能使用 javascript 创建时间戳并且直接从表单获取数据,您可以执行以下操作,请记住设置时区:

$datum = $_GET['datum'];
$uhrzeit = $_GET['uhrzeit'];
$datumUhrzeit = DateTime::createFromFormat('Y-m-d H:i:s', $datum . ' ' . $uhrzeit, new DateTimeZone('Europe/Berlin'));
Run Code Online (Sandbox Code Playgroud)

现在,当您已将日期保存到数据库并检索它时,您可以将其发回

print $datumUhrzeit->format('U'); // This will print the time as unix timestamp
Run Code Online (Sandbox Code Playgroud)

之后,您将仅使用时间戳创建您的 javascript 日期对象

var datumUhrzeit = new Date(timestamp * 1000); // timestamp from above
Run Code Online (Sandbox Code Playgroud)

如果您出于某种原因不想使用 unix 时间戳,您可以使用 format 方法以所需格式打印它。记得事先设置好时区

$datumUhrzeit->setTimezone(new DateTimeZone('Europe/Berlin'));
print $datumUhrzeit->format('Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)

因为 javascript 不适用于时区,所以我建议您尽可能使用 unix 时间戳。这样你的时区问题就少了。

  • JavaScript 返回一个 Unix 时间戳,即 UTC 时间。当它在 php 中解析时,它显示 UTC 时区的时间。您可以使用 http://php.net/manual/en/datetime.settimezone.php 更改 DateTime 对象的时区 (2认同)