JavaScript-читаемая дата/время из PHP-времени()

Возможно ли, чтобы JavaScript вычислил временную метку, возвращаемую функцией PHP time(), и представила ее в читаемом формате, таком как "Sun, 18 апреля 2010 года в 16:00"?

Ответ 1

Используйте объект Date, чтобы сделать это:

new Date(<?php echo time(); ?>*1000)

Вам нужно умножить временную метку Unix на 1000, потому что Date ожидает, что отметка времени будет в миллисекундах.

И для форматирования даты вы можете использовать этот Date.format метод (дата не имеет встроенного).

Ответ 2

Вы хотите быть очень осторожным, делая это. Когда вы берете значение времени на стороне сервера, которое представляет собой традиционное "количество секунд (или миллисекунд) со значения границы" Эпоха ", а затем превращает это в какой-то объект" Дата ", ну, а перевод происходит в часовой пояс, соответствующий локали контекста.

Проблема возникает, когда у вас есть сервер, расположенный в Чикаго, и кто-то на Гавайях, используя ваш сайт, скажет после вечеринки; одно из этих "luau" дел, без сомнения, в комплекте с обжаренными свиньями и травянистыми танцующими девушками, редким вечером под теплым тропическим небом, экзотическими цветами, душившими океанские бризы; и это уже поздно. Боже мой, это почти полночь! Что подумает мать, когда я напишу ей о вечеринке?

Наша вечеринка садится в 11:30 для использования вашего сайта. Теперь, конечно, будучи значительно восточнее Гавайских островов, ваш сервер думает, что это 5:30 утра, а дата на один день позже даты, когда наш участник-участник запишет свою короткую заметку маме. Таким образом, ваш сервер записывает свое значение времени на веб-страницу, как описано в ответах здесь, и — правильно — местное время Гавайев появляется на странице в нашем гостиничном номере Party-Goer.

Проблема заключается в следующем: если это локальное время вернет ваше приложение из какого-либо поля формы, и ваше приложение рассматривает его как местное время в Чикаго, тогда ваш сайт получит вчерашнюю дату. В зависимости от вашего приложения, которое либо ОК, либо оно не в порядке - дело в том, что вы должны отслеживать, где дата (выраженная в обычной календарной нотации) поступает от vis-a-vis, где используется дата.

Конечно, у вас может быть противоположная проблема. То есть, если ваш сервер всегда отображает даты в своем локальном часовом поясе, пользователи в другом месте в мире будут видеть смутные (по-видимому, неправильные) значения даты и времени, поэтому интерфейс должен четко указывать, что означают эти значения. Проблемы становятся важными, когда ваш сайт предоставляет услуги, связанные с графиком. Если возможно запланировать операции, важно, чтобы интерфейс оставался на уровне, так что "30 апреля в 10:00 вечера" означает либо дату и время на сервере, либо дату и время в локали, из которой было запланировано расписание, Какой бы он ни был, вы должны быть осторожны, чтобы все было в порядке.

Ответ 3

Вместо числовой отметки unix вы также можете отправить текстовое представление даты, которую понимает Date.parse().
Возможно, это только мой вклад в глобальное потепление, но я думаю, что есть преимущества в использовании формата, который немного читабельнее и содержит информацию о часовом поясе.

например.

<?php
// I have "decided" America/Los_Angeles fits most of my audience
date_default_timezone_set('America/Los_Angeles');
$now = time();
$yesterday = strtotime('yesterday', $now);
// March 27, 1976 08:00:00 tz:America/Los_Angeles
$someotherdate = mktime(8, 0, 0, 3, 27, 1976)
?><html>
  <head><title>...</title>
    <script type="text/javascript" src="jquery.min.js"></script>
    <script type="text/javascript">
      function foo() {
        $('.datetime').each( function() {
          var t = $(this).text();
          t = new Date(Date.parse(t)).toLocaleString();
          $(this).text(t);
        });
      }
    </script>
  </head>
  <body>
    <div><span class="datetime"><?php echo date(DateTime::RSS, $now); ?></span></div>
    <div><span class="datetime"><?php echo date(DateTime::RSS, $yesterday); ?></span></div>
    <div><span class="datetime"><?php echo date(DateTime::RSS, $someotherdate); ?></span></div>
    <button onclick="foo()">to local time</button>
  </body>
</html>

Отпечатает

Sat, 17 Apr 2010 04:40:15 -0700
Fri, 16 Apr 2010 00:00:00 -0700
Sat, 27 Mar 1976 08:00:00 -0800

в моем браузере и (так как мой локальный часовой пояс - Европа/Берлин, CET, UTC + 1/2) после нажатия кнопки to local time

Samstag, 17. April 2010 13:40:15
Freitag, 16. April 2010 09:00:00
Samstag, 27. März 1976 17:00:00

Ответ 4

В настоящее время 2013 год, и по мере того, как все больше и больше людей переключаются с обработки результатов SQL на стороне PHP, чтобы передавать результаты в JSON и обрабатывать на стороне клиента, я думаю, что moment.js заслуживает отдельного внимания, предлагая простые замены PHP strtotime() и date() в Javascript, а также еще несколько.

Просто включите:

<script src="SCRIPT_DIR/moment.min.js" type="text/javascript"></script>

Тогда это так же просто, как:

// Simulates ajax response
var data = { someDate: "2023-08-23 11:52:39" }

// .unix() converts to Unix timestamp: 1692816759
moment(data.someDate).unix();

// Displaying it in a readable format
// Aug 23, 11:52 AM
moment("2023-08-23 11:52:39").format('MMM D, hh:mm A');

// Now
moment();

// Support for manipulation and chaining
moment().add('days', 7).subtract('months', 1).hours(15).minutes(0).seconds(0);

Здесь вы можете скачать файл с файлом 5.5kb:

http://momentjs.com/

Больше документов здесь:

http://momentjs.com/docs/