Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将PHP日期发送为JavaScript日期格式_Php_Javascript_Date_Timezone_Timezone Offset - Fatal编程技术网

将PHP日期发送为JavaScript日期格式

将PHP日期发送为JavaScript日期格式,php,javascript,date,timezone,timezone-offset,Php,Javascript,Date,Timezone,Timezone Offset,我想把我的PHP服务器时间传递给我的JavaScript文件 PHP代码: date_default_timezone_set('Australia/Perth'); echo date("r"); JavaScript: $.get('time.php', function(data) { today = new Date(data); closing = new Date(data); }); var date = new Date(Date.parse(DATE)); PHP

我想把我的PHP服务器时间传递给我的JavaScript文件

PHP代码:

date_default_timezone_set('Australia/Perth');
echo date("r");
JavaScript:

$.get('time.php', function(data) {
  today = new Date(data);
  closing = new Date(data);
});
var date = new Date(Date.parse(DATE));
PHP代码返回Sun,2012年3月18日12:01:23+0800,这是澳大利亚/珀斯的正确时间。但这会返回一个无效的JavaScript日期对象

当我尝试将其转换为时间戳时,如:

 echo strtotime(date("r"));
我得到了JavaScript日期Sun Mar 18 2012 04:03:14 GMT+0000(湿)(这是今天js var的值)

如果我使用:

echo gmstrftime('%s');
我得到:2012年3月17日星期六20:04:30 GMT+0000(湿)

谁能帮帮我吗

$.get('time.php', function(data) {
  today = new Date(data);
  closing = new Date(data);
});
将字符串乘以1000的目的是什么?那个手术没有意义

这个PHP将为此工作

echo date('D, d M y H:i:s')." +0000";
带有
echo date
的PHP代码与JavaScript代码不完全相同。这将完全模拟JavaScript代码:

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

一个好方法是使用时间戳:

echo $data = time()*1000;
echo '
  <div id="setxDatetime">The current server time is: </div>
  <script type="text/javascript">
    var x = document.getElementById("setxDatetime");
    x.innerHTML = x.innerHTML + new Date(' . $data . ');
  </script>
';
echo$data=time()*1000;
回声'
当前服务器时间为:
var x=document.getElementById(“setxDatetime”);
x、 innerHTML=x.innerHTML+新日期(“.$data”);
';
1381324693000

当前服务器时间为:2013年10月9日星期三16:18:13 GMT+0300(GTB标准时间)

如果您当前的语言环境不是英语,那么它将不起作用

更好的选择是使用:

new Date(<? echo date("Y, n - 1, d, H, i, s") ?>)
新日期()
非常简单:

new Date("<?= date('Y/m/d H:i:s'); ?>");
新日期(“”);

可能有更好的解决方案,但这一个解决了我的问题。关键问题是JavaScript使用0-11个月,而PHP使用1-12个月,如前所述

function convert_date_php_js($date) {
    $converted_date = date("Y", strtotime($date)) . ', ' .
                      (date("n", strtotime($date))-1) . ', ' .
                      date("j", strtotime($date));
    return $converted_date;
}

$priceDate = "2016-09-14";
$d = convert_date_php_js($priceDate);
// Returns 2016, 8, 14

您也可以将PHP代码保持原样,并使用JavaScript解析日期:

$.get('time.php', function(data) {
  today = new Date(data);
  closing = new Date(data);
});
var date = new Date(Date.parse(DATE));
那么,即使是这样的事情也会起作用:

new Date(Date.parse('11 March 2017'));
通过控制台日志输出(GMT+1000是因为我在澳大利亚):


更多信息如下:

以下是DateTime对象的示例:

PHP代码(适用于PHP5.3或更高版本) JavaScript代码
它是用来从unix时间戳转换的(因为毫秒),我忘记了删除它。无论如何,它返回Sun Mar 18 2012 04:10:32 GMT+0000(湿),而PHP返回Sun Mar 18 2012 12:10:32+0800。谢谢,我需要将我的javascript日期对象设置为Sun,2012年3月18日12:10:32,以便所有以下计算正常工作!为什么不使用PHP的
time()
函数呢?这与@austinbrunkhost today返回Sun Mar 18 2012 04:20:17 GMT+0000(湿)警告:PHP返回从1-12开始的月份,但Javascript使用0-11。这将始终为您提供一个月前的时间戳。此外,我们不能简单地从JS date对象中减去一个月,因为Javascript将在构建时“更正”日期。。。如果您在1月31日运行此代码,Javascript将被指定为“2月31日”,然后它将被更正为3月3日(假设2月28日)。Re“current locale is not English”:您的意思是“current locale not US English”?英语是一种语言,不是区域设置。这不会改善或与其他任何答案不同。事实上,我希望使用内置解析器解析不受支持的格式不是一个好主意,因为解析依赖于实现,在意外和难以找到的情况下可能会失败。链接断开(带有一个相当有趣的404 PNG动画):“没有找到。很抱歉,我们找不到您要的内容。“这不是我在Javascript中看到的格式。我看到的格式是:
date('D m D Y H:I:s\G\m\TO(t);
$serverDate = new \DateTime('NOW');

// If you want to set a different time zone
// $serverDate = new \DateTime('NOW', new \DateTimeZone('Australia/Perth'));
echo $serverDate->format(DATE_ATOM);
$.get('time.php', function(data) {
  var serverDate = new Date(data);
});