JavaScript читаемая дата / время из времени PHP () - PullRequest
13 голосов
/ 17 апреля 2010

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

Ответы [ 4 ]

27 голосов
/ 17 апреля 2010

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

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

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

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

2 голосов
/ 17 апреля 2010

Вместо числовой метки времени 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
2 голосов
/ 17 апреля 2010

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

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

Наш участник вечеринки садится в 23:30, чтобы использовать ваш сайт. Теперь, конечно, находясь значительно восточнее Гавайев, ваш сервер считает, что сейчас 5:30 утра, а дата на один день позже даты, которую наш участник вечеринки записывает в своей быстрой заметке для мамы. Таким образом, ваш сервер записывает значение времени на веб-страницу, как описано в ответах здесь, и & mdash; правильно & mdash; местное время на Гавайях отображается на странице в гостиничном номере нашего тусовщика.

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

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

0 голосов
/ 30 марта 2013

Сейчас 2013, и поскольку все больше и больше людей переключаются с обработки результатов SQL на стороне PHP на передачу результатов в JSON и обработку на стороне клиента, я считаю, что moment.js заслуживает отдельного внимания, поскольку предлагает простую замену strtotime в PHP Функции () и 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 js здесь:

http://momentjs.com/

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

http://momentjs.com/docs/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...