Правильный ответ:
select table_record_id,
group_concat(if(value_name='note', value_text, NULL)) as note
,group_concat(if(value_name='hire_date', value_text, NULL)) as hire_date
,group_concat(if(value_name='termination_date', value_text, NULL)) as termination_date
,group_concat(if(value_name='department', value_text, NULL)) as department
,group_concat(if(value_name='reporting_to', value_text, NULL)) as reporting_to
,group_concat(if(value_name='shift_start_time', value_text, NULL)) as shift_start_time
,group_concat(if(value_name='shift_end_time', value_text, NULL)) as shift_end_time
from other_value
where table_name = 'employee'
and is_active = 'y'
and is_deleted = 'n'
GROUP BY table_record_id
Используйте strtotime()
в вашей первой дате, затем date('Y-m-d')
, чтобы преобразовать его:
$time = strtotime('10/16/2003');
$newformat = date('Y-m-d',$time);
echo $newformat;
// 2003-10-16
Обратите внимание, что существует разница между использованием косой черты /
и дефиса -
в функцию strtotime()
. Процитировать из php.net:
Даты в форматах m / d / y или dmy устраняются путем поиска разделителя между различными компонентами: если разделитель является косой чертой (/), то предполагается американский м / д / у; тогда как если разделитель является тире (-) или точкой (.), тогда предполагается европейский формат d-m-y.
blockquote>
Вы должны быть осторожны с форматами m / d / Y и m-d-Y. PHP считает, что /
означает, что m / d / Y и -
означают d-m-Y. Я бы явно описал формат ввода в этом случае:
$ymd = DateTime::createFromFormat('m-d-Y', '10-16-2003')->format('Y-m-d');
Таким образом, вы не находитесь в капризе определенной интерпретации.
strtotime()
.
– jzimmerman2011
4 December 2012 в 23:43
Если у вас есть формат dd-mm-yyyy, то в PHP он не будет работать должным образом. В PHP-документе у них есть рекомендации ниже.
Даты в форматах m / d / y или dmy устраняются путем просмотра разделителя между различными компонентами: если разделитель является косой чертой (/), то американский m / d / y предполагается; тогда как если разделитель является тире (-) или точкой (.), тогда предполагается европейский формат d-m-y.
blockquote>Итак, вы просто не можете использовать, как хотите. Когда вы попытаетесь использовать формат dd / mm / yyyy с этим, тогда он удалит FALSE. Вы можете настроить следующие параметры:
$date = "23/02/2013"; $timestamp = strtotime($date); if ($timestamp === FALSE) { $timestamp = strtotime(str_replace('/', '-', $date)); } echo $timestamp; // prints 1361577600
$d = new DateTime('10-16-2003');
$timestamp = $d->getTimestamp(); // Unix timestamp
$formatted_date = $d->format('Y-m-d'); // 2003-10-16
Редактировать: вы также можете передать конструктор DateTimeZone в DateTime (), чтобы гарантировать создание даты для требуемого часового пояса, а не для сервера по умолчанию.
Если вы используете PHP 5.2 или high, используйте DateTime, как указано выше. Эта статья поможет.
Чтобы проанализировать дату, вы должны использовать: DateTime :: createFromFormat ();
Пример:
$dateDE = "16/10/2013";
$dateUS = \DateTime::createFromFormat("d.m.Y", $dateDE)->format("m/d/Y");
Однако, осторожно, потому что это сработает с:
PHP Fatal error: Call to a member function format() on a non-object
Вам действительно нужно проверить, что форматирование прошло хорошо, сначала:
$dateDE = "16/10/2013";
$dateObj = \DateTime::createFromFormat("d.m.Y", $dateDE);
if (!$dateObj)
{
throw new \UnexpectedValueException("Could not parse the date: $date");
}
$dateUS = $dateObj->format("m/d/Y");
Теперь вместо сбоя вы получите исключение, которое вы можете поймать, размножить и т. д.
$ dateDE имеет неправильный формат, он должен быть «16.10.2013»;
Для первой даты
$_firstDate = date("m-d-Y", strtotime($_yourDateString));
Для новой даты
$_newDate = date("Y-m-d",strtotime($_yourDateString));