Отправить дату PHP в формате даты JavaScript - PullRequest
26 голосов
/ 18 марта 2012

Я хочу передать время моего сервера 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);
});

Код PHP возвращает Sun, 18 марта 2012 12:01:23 +0800, который является правильным временем для Австралии / Перта.Но это возвращает недопустимый объект даты JavaScript.

Когда я пытаюсь преобразовать его в метку времени, например:

 echo strtotime(date("r"));

Я получаю дату JavaScript вс 18 марта 2012 04:03:14 GMT +0000 (WET) (это значение сегодняшнего дня js var)

Если я использую:

echo gmstrftime('%s');

Я получу: Sat Mar 17 2012 20:04:30 GMT + 0000 (WET).

Может кто-нибудь помочь мне?

Ответы [ 8 ]

54 голосов
/ 27 января 2013

PHP в nallar'е не совсем похож на JavaScript, он будет точно имитировать JavaScript:

echo date('D M d Y H:i:s O');
10 голосов
/ 18 марта 2012
$.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";
6 голосов
/ 15 января 2015
date('D M d Y H:i:s O') 

Не будет работать, если ваш текущий язык не английский.

Лучшая альтернатива - использовать

new Date(<? echo date("Y, n - 1, d, H, i, s") ?>)
4 голосов
/ 10 марта 2017

Вы также можете просто оставить PHP как есть и проанализировать дату с помощью JavaScript.

var date = new Date(Date.parse(DATE));

Тогда даже такие вещи будут работать:

new Date(Date.parse('11 March 2017'));

Что выводится через консольный журнал (GMT + 1000, потому что я в Австралии):

Sat Mar 11 2017 00:00:00 GMT+1000

Больше информации здесь: https://developer.mozilla.org/enUS/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

2 голосов
/ 31 мая 2017

Вот пример с объектом DateTime

код PHP (работает на> PHP 5.3)

$serverDate = new \DateTime('NOW');
// if you want to set different time zone
// $serverDate = new \DateTime('NOW', new \DateTimeZone('Australia/Perth'));
echo $serverDate->format(DATE_ATOM);

код JS

$.get('time.php', function(data) {
  var serverDate = new Date(data);
});
1 голос
/ 09 октября 2013

Хороший способ - это отметка времени

    echo $data = time()*1000;
    echo '
      <div id="setxDatetime">CURRENT SERVER TIME IS: </div>
      <script type="text/javascript">
        var x = document.getElementById("setxDatetime");
        x.innerHTML = x.innerHTML + new Date(' . $data . ');
      </script>
    ';

1381324693000

ВРЕМЯ НАСТОЯЩЕГО СЕРВЕРА: Ср 09 Окт 2013 16:18:13 GMT + 0300 (Стандартное время GTB)

0 голосов
/ 15 сентября 2016

Могли бы быть и лучшие решения, но этот помог мне. Ключевая проблема заключается в том, что 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
0 голосов
/ 08 июля 2016

очень просто:

new Date("<?= date('Y/m/d H:i:s'); ?>");
...