Форматирование даты MySQL - отображение полной даты [дубликат]

Все объекты гарантированно имеют метод .equals(), поскольку Object содержит метод, .equals(), который возвращает логическое значение. Задача подкласса переопределять этот метод, если требуется дополнительное определение определения. Без него (т. Е. С помощью ==) только адреса памяти проверяются между двумя объектами для равенства. String переопределяет этот метод .equals() и вместо использования адреса памяти возвращает сравнение строк на уровне символа для равенства.

Ключевое замечание состоит в том, что строки хранятся в одном пуле, поэтому после создания строки он всегда хранится в программе по тому же адресу. Строки не меняются, они неизменяемы. Вот почему это плохая идея использовать регулярную конкатенацию строк, если у вас есть серьезное количество обработки строк. Вместо этого вы будете использовать предоставленные классы StringBuilder. Помните, что указатели на эту строку могут измениться, и если вам было интересно увидеть, были ли два указателя одинаковыми ==, это был бы прекрасный способ. Строки сами не делают.

273
задан Vadim Kotov 13 October 2017 в 12:09
поделиться

14 ответов

Второй параметр date() должен быть правильной меткой времени (секунды с 1 января 1970 года). Вы передаете строку, которую date () не может распознать.

Вы можете использовать strtotime () для преобразования строки даты в метку времени. Однако даже strtotime () не распознает формат y-m-d-h-i-s.

PHP 5.3 и выше

Используйте DateTime::createFromFormat . Он позволяет вам указать точную маску - используя синтаксис date() - для синтаксического анализа дат входящих строк.

PHP 5.2 и ниже

Вам придется проанализировать элементы (год , месяц, день, час, минута, секунда) вручную, используя substr() и передайте результаты в mktime () , которые построят вам временную метку.

Но это большая работа! Я рекомендую использовать другой формат, который может понять strftime (). strftime () понимает какой-либо дата ввод короткий the next time joe will slip on the ice. например, это работает:

$old_date = date('l, F d y h:i:s');              // returns Saturday, January 30 10 02:06:34
$old_date_timestamp = strtotime($old_date);
$new_date = date('Y-m-d H:i:s', $old_date_timestamp);   
247
ответ дан Pekka 웃 16 August 2018 в 03:53
поделиться
  • 1
    Спасибо, Пекка, только что отредактировал мой вопрос, попробовал это, но он, похоже, не работает. – Tom 30 January 2010 в 14:02
  • 2
    Я отредактировал ответ, когда вы его приняли :) Я добавил еще несколько примеров и ссылок. – Pekka 웃 30 January 2010 в 14:07
  • 3
    Гоча, это действительно проблема. Это фиксированное имя файла, которое мне нужно преобразовать обратно в дату (должно быть в этом формате), поэтому я придумаю обходное решение. – Tom 30 January 2010 в 14:15
  • 4
    благодаря его работе для меня – Pervaiz Iqbal 4 September 2014 в 13:14
  • 5
    Примечание. Согласно php.net DateTime существует, поскольку PHP 5.2 в ядре PHP и экспериментальная поддержка для DateTime могут быть включены для PHP 5.1 при компиляции. secure.php.net/manual/en/datetime.installation.php – Charlotte Dunois 14 October 2016 в 16:49

Просто используя строки, для меня это хорошее решение, меньше проблем с mysql. Обнаруживает текущий формат и при необходимости меняет его, это решение предназначено только для испанского / французского формата и английского формата без использования функции php datetime.

class dateTranslator {

 public static function translate($date, $lang) {
      $divider = '';

      if (empty($date)){
           return null;   
      }
      if (strpos($date, '-') !== false) {
           $divider = '-';
      } else if (strpos($date, '/') !== false) {
           $divider = '/';
      }
      //spanish format DD/MM/YYYY hh:mm
      if (strcmp($lang, 'es') == 0) {

           $type = explode($divider, $date)[0];
           if (strlen($type) == 4) {
                $date = self::reverseDate($date,$divider);
           } 
           if (strcmp($divider, '-') == 0) {
                $date = str_replace("-", "/", $date);
           }
      //english format YYYY-MM-DD hh:mm
      } else {

           $type = explode($divider, $date)[0];
           if (strlen($type) == 2) {

                $date = self::reverseDate($date,$divider);
           } 
           if (strcmp($divider, '/') == 0) {
                $date = str_replace("/", "-", $date);

           }   
      }
      return $date;
 }

 public static function reverseDate($date) {
      $date2 = explode(' ', $date);
      if (count($date2) == 2) {
           $date = implode("-", array_reverse(preg_split("/\D/", $date2[0]))) . ' ' . $date2[1];
      } else {
           $date = implode("-", array_reverse(preg_split("/\D/", $date)));
      }

      return $date;
 }

USE

dateTranslator::translate($date, 'en')
0
ответ дан Alejandro Aranda 16 August 2018 в 03:53
поделиться

Это решено для меня,

$old = '18-04-2018';
$new = date('Y-m-d', strtotime($old));
echo $new;

Выход: 2018-04-18

2
ответ дан Arthi Rajgopal 16 August 2018 в 03:53
поделиться

Самый простой способ сделать это -

$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
$newDateString = $myDateTime->format('m/d/Y');

Сначала вы указываете формат $ dateString. Затем вы сообщаете ему формат, в котором вы хотите $ newDateString.

Это также позволяет избежать использования strtotime, с которым трудно работать время от времени.

Если вы не переходите из одного формата даты в другой, а просто хотите, чтобы текущая дата (или дата-время ) в определенном формате, то это еще проще:

$now = new DateTime();
$timestring = $now->format('Y-m-d h:i:s');

Этот другой вопрос также относится к одной теме: Преобразование формата даты yyyy-mm-dd = & gt; дд-мм-гггг .

85
ответ дан Community 16 August 2018 в 03:53
поделиться

strtotime будет работать так. даты не совпадают и все в формате usb.

<?php
$e1 = strtotime("2013-07-22T12:00:03Z");
echo date('y.m.d H:i', $e1);
echo "2013-07-22T12:00:03Z";

$e2 = strtotime("2013-07-23T18:18:15Z");
echo date ('y.m.d H:i', $e2);
echo "2013-07-23T18:18:15Z";

$e1 = strtotime("2013-07-21T23:57:04Z");
echo date ('y.m.d H:i', $e2);
echo "2013-07-21T23:57:04Z";
?>
6
ответ дан de_nuit 16 August 2018 в 03:53
поделиться

Основы

Простейшим способом преобразования одного формата даты в другой является использование strtotime() с date() . strtotime() преобразует дату в метку Unix . Затем отметку времени Unix можно передать в date(), чтобы преобразовать ее в новый формат.

$timestamp = strtotime('2008-07-01T22:35:17.02');
$new_date_format = date('Y-m-d H:i:s', $timestamp);

Или как однострочный:

$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));

Имейте в виду, что strtotime() требует, чтобы дата была в допустимом формате , Невозможность предоставить допустимый формат приведет к тому, что strtotime() вернет false, что приведет к тому, что ваша дата будет 1969-12-31.

Использование DateTime()

Начиная с PHP 5.2, PHP предложил класс DateTime() , который предлагает нам более мощные инструменты для работы с датами (и временем). Мы можем переписать приведенный выше код с помощью DateTime() следующим образом:

$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = $date->format('Y-m-d H:i:s');

Работа с временными метками Unix

date() принимает Unix timeatamp в качестве второго параметра и возвращает форматированную дату для вас:

$new_date_format = date('Y-m-d H:i:s', '1234567890');

DateTime () работает с отметками времени Unix, добавив @ перед меткой времени:

$date = new DateTime('@1234567890');
$new_date_format = $date->format('Y-m-d H:i:s');

Если метка времени у вас есть в миллисекундах (она может заканчиваться на 000 и / или метка времени составляет тринадцать символов), вам нужно будет преобразовать ее в несколько секунд, прежде чем вы сможете преобразовать ее в другой формат. Это можно сделать двумя способами:

  • Отключить последние три цифры с помощью substr()

Обрезка последних трех цифр может быть достигнуто несколькими способами, но использование substr() является самым простым:

$timestamp = substr('1234567899000', -3);
  • Разделить субстрат на 1000

Вы также можете преобразовать метку времени в секундах путем деления на 1000. Поскольку временная метка слишком велика для 32-битных систем для математики, вам нужно будет использовать библиотеку BCMath для выполнения математики как строки:

$timestamp = bcdiv('1234567899000', '1000');

Чтобы получить временную метку Unix, вы можете использовать strtotime(), который возвращает отметку времени Unix:

$timestamp = strtotime('1973-04-18');

С помощью функции DateTime () вы можете использовать DateTime::getTimestamp()

$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->getTimestamp();

Если вы используете PHP 5.2, вы можете использовать опцию форматирования U:

$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');

Работа с нестандартными и неоднозначными форматами даты

К сожалению, не все даты, с которыми разработчик должен работать, находятся в стандартном формате. К счастью, PHP 5.3 предоставил нам решение для этого. DateTime::createFromFormat() позволяет нам рассказать PHP о том, в каком формате используется строка даты, чтобы ее можно было успешно проанализировать в объект DateTime для дальнейших манипуляций.

$date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
$new_date_format = $date->format('Y-m-d H:i:s');

В PHP 5.4 мы получила возможность делать доступ к членам класса при создании экземпляра, что позволяет нам превратить наш код DateTime() в однострочный:

$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');

$new_date_format = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM')->format('Y-m-d H:i:s');
40
ответ дан John Conde 16 August 2018 в 03:53
поделиться

Вам нужно преобразовать $ old_date обратно в метку времени, поскольку функция даты требует отметки времени в качестве ее второго аргумента.

6
ответ дан John Parker 16 August 2018 в 03:53
поделиться

Этот родной способ поможет преобразовать любой введенный формат в нужный формат.

$formatInput = 'd-m-Y'; //Give any format here, this would be converted into your format
$dateInput = '01-02-2018'; //date in above format

$formatOut = 'Y-m-d'; // Your format
$dateOut = DateTime::createFromFormat($formatInput, $dateInput)->format($formatOut);
2
ответ дан Nishad Up 16 August 2018 в 03:53
поделиться

Попробуйте следующее:

$tempDate = explode('-','03-23-15');
$date = '20'.$tempDate[2].'-'.$tempDate[0].'-'.$tempDate[1];
4
ответ дан Pang 16 August 2018 в 03:53
поделиться

Ниже приведен простой способ преобразования дат в разные форматы.

// Create a new DateTime object
$date = DateTime::createFromFormat('Y-m-d', '2016-03-25');

// Output the date in different formats
echo $date->format('Y-m-d')."\n";
echo $date->format('d-m-Y')."\n";
echo $date->format('m-d-Y')."\n";
9
ответ дан Peter 16 August 2018 в 03:53
поделиться
$old_date = date('y-m-d-h-i-s');       // works

вы делаете неправильно здесь, это должно быть

$old_date = date('y-m-d h:i:s');       // works

разделитель времени is::


Я думаю, это поможет ...

$old_date = date('y-m-d-h-i-s');              // works

preg_match_all('/(\d+)-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)/', $old_date, $out, PREG_SET_ORDER);
$out = $out[0];
$time = mktime($out[4], $out[5], $out[6], $out[2], $out[3], $out[1]);

$new_date = date('Y-m-d H:i:s', $time); 

ИЛИ


$old_date = date('y-m-d-h-i-s');              // works

$out = explode('-', $old_date);
$time = mktime($out[3], $out[4], $out[5], $out[1], $out[2], $out[0]);

$new_date = date('Y-m-d H:i:s', $time); 
9
ответ дан Rifat 16 August 2018 в 03:53
поделиться
  • 1
    Да, конечно, спасибо, это имя GUID-файла, которое я хочу преобразовать обратно в правильный формат даты. – Tom 30 January 2010 в 14:11

Чтобы преобразовать $date из dd-mm-yyyy hh:mm:ss в надлежащее MySQL-datetime, я иду так:

$date = DateTime::createFromFormat('d-m-Y H:i:s',$date)->format('Y-m-d H:i:s');
12
ответ дан RousseauAlexandre 16 August 2018 в 03:53
поделиться
  • 1
    Вам не следует связывать эти методы, если вы не уверены, что $ date является допустимой датой и соответствует формату. С учетом этого возвращается неверная дата, которая не соответствует формату: Fatal error: Call to a member function format() on a non-object. Просто голова! – Half Crazed 11 April 2014 в 14:48
  • 2
    Правда, лучшим решением является сделать это за 3 шага с нулевой проверкой в ​​качестве среднего шага. – Jelle de Fries 18 April 2014 в 08:41

Попробуйте следующее:

$old_date = date('y-m-d-h-i-s');
$new_date = date('Y-m-d H:i:s', strtotime($old_date));
24
ответ дан Sarfraz 16 August 2018 в 03:53
поделиться
  • 1
    Не будет работать, strtotime () не распознает формат. Просто попробовал. – Pekka 웃 30 January 2010 в 14:16
  • 2
    согласен, я просто вставляю код формата из опроса, должен быть установлен соответствующий формат. – Sarfraz 30 January 2010 в 15:09
  • 3
    Это сработало для меня. Мой $ old_date был чем-то вроде этого 2012-05-22T19: 16: 37 + 01: 00. Спасибо, кстати! – VishwaKumar 25 May 2012 в 09:18

Это другой способ преобразования формата даты

 <?php
$pastDate = "Tuesday 11th October, 2016";
$pastDate = str_replace(",","",$pastDate);

$date = new DateTime($pastDate);
$new_date_format = $date->format('Y-m-d');

echo $new_date_format.' 23:59:59'; ?>
1
ответ дан Varun Malhotra 16 August 2018 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: