Удобное для восприятия, текущее время и форматирование даты и времени в PHP - PullRequest
2 голосов
/ 15 июля 2010

Существует ли безболезненный способ конвертировать метки времени Unix, метки времени MySQL, даты и время MySQL (или любой другой стандартный формат даты и времени) в строки в следующем виде:

  • Сегодня, 18:00
  • Завтра, 12:30 вечера
  • Среда, 4:00 вечера
  • В следующую пятницу, 11:00 утра

Я не знаю, как позвонитьэто, я полагаю, форматы дат, ориентированные на текущее время, в диалоговом стиле?

Ответы [ 6 ]

4 голосов
/ 16 июля 2010

Насколько я могу судить, для этого нет встроенной функции.Я создал (начало) функцию, которая делает то, что вы хотите.

1 голос
/ 15 июля 2010

Вы должны прочитать документы для strftime и strtotime

Пример преобразования метки времени UNIX в ваш формат:

$time = time(); // UNIX timestamp for current time
echo strftime("%A, %l:%M %P"); // "Thursday, 12:41 pm"

Чтобы получить значение даты и времени MySQL, предполагая, что оно выходит из базы данных как «2010-07-15 12:42:34», попробуйте следующее:

$time = "2010-07-15 12:42:34";
echo strftime("%A, %l:%M %P"); // "Thursday, 12:42 pm"

Теперь, чтобы напечататьСлово «сегодня» вместо названия дня вам придется выполнить дополнительную логику, чтобы проверить, является ли дата сегодня:

$time = "2010-07-15 12:42:34";
$today = strftime("%Y-%m-%d");

// compare if $time strftime's to the same date as $today
if(strftime("%Y-%m-%d", $time) == $today) {
  echo strftime("Today, %l:%M %P", $time);
} else {
  echo strftime("%A, %l:%M %P", $time);
}
0 голосов
/ 17 февраля 2017
you will get exact result::
output // 28 years 7 months 7 days


        function getAge(dateVal) {
            var
                birthday = new Date(dateVal.value),
                today = new Date(),
                ageInMilliseconds = new Date(today - birthday),
                years = ageInMilliseconds / (24 * 60 * 60 * 1000 * 365.25 ),
                months = 12 * (years % 1),
                days = Math.floor(30 * (months % 1));
            return Math.floor(years) + ' years ' + Math.floor(months) + ' months ' + days + ' days';

        }
0 голосов
/ 17 августа 2010

Если вы извлекаете данные этого типа из вашей базы данных

$time = "2010-07-15 12:42:34";

тогда сделайте это

$this->db->select('DATE_FORMAT(date, "%b %D %Y")AS date');

Ищите здесь информацию для отображения ваших данных любым удобным для вас способом

http://www.w3schools.com/SQL/func_date_format.asp

Приведенный выше код представлен в формате codeigniter, но вы можете просто преобразовать его в оператор SELECT для MYSQL

$query = "SELECT `title`,`post`, DATE_FORMAT(date, "%a, %d %b %Y %T") AS date FROM `posts` LIMIT 0, 8 ";

Вы захотите изменить% a буквы в соответствии с вашими потребностями.

0 голосов
/ 15 июля 2010

Функции даты в PHP немного беспорядочные, потому что у них очень много разных способов, и даже старые классы были построены поверх старых. Для такого типа форматирования, который я называю удобным для человека форматированием, вам придется написать собственную функцию, которая это делает.

Для преобразования вы можете использовать strtotime (), как уже упоминалось, но если вы имеете дело со временем эпохи и вам нужно время по Гринвичу, вот некоторые функции для этого. strtotime () конвертирует время эпохи в время локального сервера ... это было то, чего я не хотел в своих проектах.

/**
 * Converts a GMT date in UTC format (ie. 2010-05-05 12:00:00)
 * Into the GMT epoch equivilent
 * The reason why this doesnt work: strtotime("2010-05-05 12:00:00")
 * Is because strtotime() takes the servers timezone into account
 */
function utc2epoch($str_date)
{
    $time = strtotime($str_date);
    //now subtract timezone from it
    return strtotime(date("Z")." sec", $time);
}

function epoch2utc($epochtime, $timezone="GMT")
{
    $d=gmt2timezone($epochtime, $timezone);
    return $d->format('Y-m-d H:i:s');
}
0 голосов
/ 15 июля 2010

Для этого пригодится strtotime.

Пример:

echo date('d, h:i:sa', strtotime($date_orig));
...