【问题标题】:JS date into PHP var [duplicate]JS日期到PHP var [重复]
【发布时间】:2019-10-28 17:24:51
【问题描述】:

我需要获取用户客户端的日期并将其转换为 PHP 变量。

我知道这有点 hacky,但我能够从用户客户端获取日期到 PHP 中

$today_js = '<script>document.write(new Date());</script>';

echo $today_js;
//  Mon Oct 28 2019 12:12:20 GMT-0500 (Central Daylight Time)

所以我希望将字符串转换为在 PHP 中进一步操作,如下所示:

$today_js = '<script>document.write(new Date());</script>';
$userdate = strtotime($today_js);
$today_dt = getDate($userdate);
$year     = $today_dt['year'];
$month    = $today_dt['mon'];
$day      = $today_dt['mday'];

但是我没有得到想要的结果。年份是 1970,月份和日期都是 1。

问题不在于前端编码。我得到以下 PHP 字符串:“Mon Oct 28 2019 12:12:20 GMT-0500 (Central Daylight Time)”只需要我的其余 PHP 代码即可使用它。

我错过了什么?

【问题讨论】:

  • 为什么不 ajax 呢?
  • 您提供的代码不是“从用户客户端获取日期到 PHP”。这不是它的工作原理。 JS 是客户端,PHP 是服务器端。 PHP 只是将脚本标记作为标记回显,它仍然由客户端执行。
  • 我得到了正确日期的 PHP 字符串。如何让它与 strtotime() 一起工作?
  • @santa 我敢打赌你不是。那将是某种黑魔法。那么请告诉我们echo htmlentities($today_js);的结果。
  • 请删除此代码:document.write(new Date());'; $userdate = strtotime($today_js); $today_dt = getDate($userdate); $year = $today_dt['year']; $month = $today_dt['mon']; $day = $today_dt['mday']; echo '$today_js: '.$today_js.' | $userdate: '.$userdate.' | $date: '.$date.' | $year: '.$year.' | $month: '.$month.' | $day: '.$day; ?> 这里:phpfiddle.org/lite

标签: javascript php date


【解决方案1】:

你想要达到的目标是不可能的。

PHP 正在服务器上运行,当来自客户端的新请求 命中时,您的代码将执行。这意味着此代码将永远不会到达客户端,然后再返回服务器。

实现所需的方法是从客户端向服务器发送一个带有用户日期的新请求(AJAX、提取、您选择)。例如,您将需要一个端点/get-user-date,它将获取该数据,然后执行您需要执行的任何操作,并返回结果。然后,JS 在客户端将使用它来显示您想要显示的任何内容。

对不起,如果这个解释很笼统,但是很难用几句话来解释这样一个概念。

【讨论】:

  • 这不是有效的 PHP 字符串:“Mon Oct 28 2019 12:12:20 GMT-0500 (Central Daylight Time)”吗?如果是,那么我需要 PHP 的其余部分来使用它。
  • @santa - 是的,它是一个有效的 PHP 字符串。 foobar 也是如此,但除此之外,PHP 永远不会像你所做的那样在字符串中得到 js 代码的结果,原因是这个答案和所有已经提到的 cmets。 JS 在 PHP 之后执行,而 PHP 不执行 JS。所以当你这样做时:$foo = '&lt;script&gt;...&lt;/script&gt;',这将是文字字符串(包括&lt;script&gt;),直到你回显它,所以它被发送到可以执行它的客户端。但是到那时,PHP 不再可用,因为您现在处于客户端环境中。
  • @santa 您关注的是错误的事情。你试图解决问题的方法不是正确的。 &lt;script&gt; 由浏览器运行,无论您是否可以在 PHP 上获得正确的输出,它都由浏览器有效运行,正如 Magnus 所说,在 PHP 执行之后。
【解决方案2】:

PHP 运行在服务器端,因此它永远不会直接读取客户端/浏览器时间。

如果需要读取客户端时间,使用javascript读取:

<script>
date = new Date();
window.location.href = "http://somesite.somedomain/index.php?date="+date.toUTCString();
</script>

并从您的 php 脚本中读取它:

if (isset($_GET['date'])) {
    $today_js = str_replace('%20', ' ', $_GET['date']);

    $userdate = strtotime($today_js);
    $today_dt = getDate($userdate);
    $year     = $today_dt['year'];
    $month    = $today_dt['mon'];
    $day      = $today_dt['mday'];  

    echo $year.' - '.$month.' - '.$day;
}

或者您可以使用 ajax 而不是 GET 变量来传递值。

【讨论】:

    【解决方案3】:

    以 2019-10-10 格式获取日期

    $date  = date("Y-m-d");
    

    获取 2019 年

    $year = date("Y")
    
    > get month 10
    

    $month = date("m");

    第 28 天

    $day = date("d");
    
    >  Pega data completa ex: 2019-10-29 12:12:20
    
    

    date("Y-m-d H:i:s")

    访问:https://www.php.net/manual/pt_BR/function.date.php

    【讨论】:

    • 仅代码的答案在本网站上通常不受欢迎。您能否编辑您的答案以包含一些 cmets 或对您的代码的解释?解释应该回答这样的问题:它有什么作用?它是如何做到的?它去哪儿了?它如何解决OP的问题?请参阅:How to anwser。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-04-01
    • 2013-11-18
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    相关资源
    最近更新 更多