Возможно ли, чтобы JavaScript вычислил временную метку, возвращаемую функцией PHP time()
, и представила ее в читаемом формате, таком как "Sun, 18 апреля 2010 года в 16:00"?
JavaScript-читаемая дата/время из PHP-времени()
Ответ 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:
Больше документов здесь: