我想使用 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 $curDateString
或var_dump($curDateString)
将输出3 november 2013
- 这是因为默认Content-Type
是text/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