【问题标题】:Convert JavaScript new Date() to php DateTime()将 JavaScript new Date() 转换为 php DateTime()
【发布时间】:2015-07-03 16:13:45
【问题描述】:

我在 HTML 中有 2 个字段:

<input id="datum" type="date">
<input id="uhrzeit" type="time">

JavaScript:

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

 "Tue Aug 18 2015 16:45:00 GMT+0200 (Mitteleuropäische Sommerzeit)"

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

【问题讨论】:

标签: javascript php date datetime


【解决方案1】:

您可以从 Date 对象中获取 unix 时间戳,如下所示 (see Date.prototype.getTime)

var timestamp = '@' + Math.round(datumUhrzeit.getTime()/1000);

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

$datumUhrzeit = new DateTime($timestamp);

如果你不能使用 javascript 创建时间戳,而你直接从表单中获取数据,你可以这样做,记得设置时区:

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

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

print $datumUhrzeit->format('U'); // This will print the time as unix timestamp

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

var datumUhrzeit = new Date(timestamp * 1000); // timestamp from above

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

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

因为 javascript 不能很好地处理时区,所以我建议您尽可能使用 unix 时间戳。这样您就可以减少时区问题。

【讨论】:

  • 在 PHP 中:未捕获的异常 'Exception' 带有消息 'DateTime::__construct():无法在位置 10 (0) 解析时间字符串 (1436525100000):意外字符
  • 很抱歉 :) 现在检查一下。您必须将 getTime 输出除以 1000,因为它返回毫秒,而 unix 时间戳使用秒。它还需要时间戳前面的@字符。
  • in javascript: 2015-07-10 12:00:00 in php: 2015-07-10 10:00:00 我应该在 php 中添加 2 小时吗?多么拼凑!
  • javascript返回一个unix时间戳,它是UTC时间。当它在 php 中解析时,它会显示 UTC 时区的时间。您可以使用 php.net/manual/en/datetime.settimezone.php 更改 DateTime 对象的时区
  • 那么我怎样才能在 Javascript 中获得正确的时间呢? $datumUhrzeit = new DateTime("2015-07-10 11:00:00",new DateTimeZone('UTC')); echo date_format($datumUhrzeit, 'Y-m-d H:i');那么我怎样才能从 11:00:00 到 13:00:00(我一开始在我的 html 字段中的时间)
【解决方案2】:

你可以做类似的事情

$datumUhrzeit = 'Tue Aug 18 2015 16:45:00 GMT+0200 (Mitteleuropäische Sommerzeit)';
$datumUhrzeit = substr($datumUhrzeit, 0, strpos($datumUhrzeit, '('));
$resultDate = date('Y-m-d h:i:s', strtotime($datumUhrzeit));
echo $resultDate;

【讨论】:

  • 不行,我在数据库中得到了“1970-01-01 01:00:00”。
  • 你的表结构是什么
【解决方案3】:

您可以使用此 javascript 函数将 dateObjectdate string 转换为您想要的格式:

/**
 * Formats a dateObject or date string to Y-m-d date
 * Example: Converts  dateObject or date string  Sat Aug 19 2017 00:00:00 GMT+0530 (India Standard Time)   TO  2017-08-19   
 */
function format_date( date )
{
    if (typeof date == "string")
    {
        date = new Date(date);
    }

    var year = date.getFullYear();
    var month = (1 + date.getMonth()).toString();
    month = month.length > 1 ? month : '0' + month;

    var day = date.getDate().toString();
    day = day.length > 1 ? day : '0' + day;

    return year+'-'+month+'-'+day;
}

var dateString = 'Tue Aug 18 2015 16:45:00 GMT+0200 (Mitteleuropäische Sommerzeit)';

var formattedDate = format_date(dateString);//returned formatted date is 2015-08-18

然后您可以将此格式化日期传递给您的 PHP 代码,您可以在其中使用函数 strtotime 将此日期转换为您想要的格式。例如:

$myFormattedDate = date('d-m-Y', strtotime($_REQUEST['formattedDate']));

【讨论】:

  • 我想用 php 做同样的事情
  • 不需要 $cheque_date = substr($request['cheque_date'], 0, strpos($request['cheque_date'], '(')); $insertArray['cheque_date'] = date('Y-m-d', strtotime($cheque_date));
【解决方案4】:

试试这个

 function myFunction() {
      var content =  document.getElementById("datum").value+","+document.getElementById("uhrzeit").value;
  console.log(content);

  }

【讨论】:

  • @user3037960 那是因为这段代码一团糟。检查stackoverflow.com/a/3005959/156811
  • @user3037960 您可能认为它的代码相同,但事实并非如此。在复制另一个问题的答案时,他错过了strtotime(datumUhrzeit) 中的$,在这种状态下,代码将无法按预期工作。出于这个原因,我不会编辑这个答案,也因为它写得不好。
  • 此时从哪里复制代码并不重要,编写目标是为问题提供解决方案......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-28
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多