如何在PHP中获取相同的日期和时间,如JS Date()

时间:2018-05-15 21:15:18

标签: javascript php

所以我想在php中获取今天的日期,时间和时区等。在stackoverflow的其他问题中,我最终得到了这个:echo date('D M d Y H:i:s O') 它返回:Tue May 15 2018 23:08:48 +0200

但是当我在JS中使用Date()函数时,它会返回:Tue May 15 2018 23:12:55 GMT+0200 (Central Europe Daylight Time)

这就是问题如何在PHP中获得与JS相同的结果?我不知道,也许我可以将(Central Europe Daylight Time)添加为文本,但这很奇怪。你能救我一下吗?

注意:默认时区是在PHP中设置的。就像那样:date_default_timezone_set("Europe/Prague");

这是添加文字版本:

$today = date('D M d Y H:i:s O')." (Central Europe Daylight Time)";
echo $today;

它返回Tue May 15 2018 23:25:09 +0200 (Central Europe Daylight Time)这个。

4 个答案:

答案 0 :(得分:1)

试试这个:

$today = date('D M d Y H:i:s O',strtotime("now"));

它将返回服务器的当前时间(正如您所说:欧洲/布拉格)。

永远不要依赖用户在JS中的时间(可以从用户更改为用户)。

答案 1 :(得分:0)

要解决在每种语言中存储相同的日期值...

您可以使用Unix UTC时间戳在JavaScript和PHP中创建日期。

在JavaScript中:

var timestamp = new Date().getTime();
var formattedDate = new Date(timestamp);
console.log(formattedDate);

在PHP中:

$timestamp = time();
$formattedDate = gmdate("D M d Y H:i:s O", $timestamp);
echo $formattedDate;

在上面的代码中,JavaScript timestamp和PHP $timestamp都表示为Unix UTC时间戳。您可以在两种语言之间自由且一致地传递这些值。

如果您以这种方式存储时间戳作为权威数据,那么您可以随时格式化输出日期,无论您想要什么,以及在任何时区。

我会从那里开始,以便您拥有一致的数据。

如果您对格式本身也感兴趣,那么这是一个单独的问题。

答案 2 :(得分:0)

要像js版本一样显示,请尝试

echo date('D M d Y H:i:s O') .' '. date_default_timezone_get();

OR

$dt = date_timezone_get(date_create(time()));
echo date('D M d Y H:i:s O') . $dt->getName();

这将打印出来

Tue May 15 2018 23:36:22 +0200 Europe / Berlin

答案 3 :(得分:0)

在您的php文件中,您可以将当前的unix时间戳直接写入javascript变量。这将为您提供一个稳定的起点(服务器端提供的javascript日期对象)来运行倒计时。

代码:

<?php
echo date('Y-m-d h:i:s', time()) , "<br>\n";  // purely for demonstration
?>
<script>
var unix = new Date(<?=time()*1000?>).toLocaleString("en-US", {timeZone: "Europe/Prague"}); // convert to milliseconds, not seconds; force timezone
document.write(unix);
</script>

输出:

2018-05-16 04:03:00                       <-- (Unix timestamp)
5/16/2018, 6:03:00 AM                     <-- (American formatted Prague time)

生成的源代码:

2018-05-16 04:03:00<br>
<script>
var unix = new Date(1526443380000).toLocaleString("en-US", {timeZone: "Europe/Prague"}); // convert to milliseconds, not seconds; force timezone
document.write(unix);
</script>

进一步研究/理解的一些参考资料......

Convert a Unix timestamp to time in JavaScript
How to initialize javascript date to a particular timezone