PHP 和 JavaScript 的本地日期


Local date with PHP and JavaScript

我想使用 PHP 和 JavaScript 回显当前的本地日期(不是服务器日期)。

我的代码如下:

<?php
$year = '<script type="text/javascript">
    var date = new Date();
    var year = date.getFullYear();
    document.write(year);
    </script>';
$month = '<script type="text/javascript">
    var date = new Date();
    var month = date.getMonth();
    var monthName = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "november", "December");
    var curMonth = monthName[month];
    document.write(curMonth);
    </script>';
$day='<script type="text/javascript">
    var date = new Date();
    var day = date.getDate();
    document.write(day);
    </script>';
$curDateString = $day . " " . $month . " " . $year;
$curDate = date('m/d/y', strtotime($curDateString));
echo $curDate;
?>

它总是返回01/01/70 .

我做错了什么?

你的 JavaScript 代码将在客户端执行,而不是在服务器端执行。这意味着 JavaScript 代码不会在服务器端得到评估,因此字符串$curDateString不会有你认为的值。

正常的echo $curDateStringvar_dump($curDateString)将输出3 november 2013 - 这是因为默认Content-Typetext/html$curDateString变量中的代码将在客户端执行,输出将3 november 2013

要了解$curDateString真正包含的内容,您可以执行以下操作:

header('Content-Type: text/plain');
var_dump($curDateString);

这将输出如下内容:

string(587) "<script type="text/javascript">
    var date = new Date();
    ...
    </script>

对于PHP来说,这是随机的胡言乱语。然后,您对上述字符串使用 strtotime(),但它失败并将返回 01/01/70 作为输出。

要实现您想要的,您可以进行 AJAX 调用,该调用将从客户端传递日期值。然后,您可以在 PHP 脚本中接收此输入,在服务器端对其进行处理并相应地发回。

使用 PHP only 非常简单:

例如,如果您来自伦敦,您将执行以下操作:

date_default_timezone_set('Europe/London');

之后,您将获得时间:

$date = date('m/d/Y h:i:s a');

echo $date