Как исправить ошибку с датой MSSQL в PHP

Автор logic, 2010 Июнь 20, 22:46

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] phpapachemssql

logic

В таблице есть дата пример 16.06.2010 13:07:05.
вынося ее вот таким способом
$date = date('d.m.Y h:i:s',$myrow44['bloc_date']);
echo $date;

Получаю: 01.01.1970 03:00:00
В чем ошибка?

Sweng

Цитата: logic от 2010 Июнь 20, 22:46  В таблице есть дата пример 16.06.2010 13:07:05.
вынося ее вот таким способом
$date = date('d.m.Y h:i:s',$myrow44['bloc_date']);
echo $date;

Получаю: 01.01.1970 03:00:00
В чем ошибка?
Сначала ответь на вопрос, какую версию апаче пользуешь?

epmak

#2
на самом деле у вафлана отключен показ варнингов
ЦитироватьStrict Standards: date() [function.date]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Moscow' for '4.0/DST' instead in локация_скрипта

как решить читаем тут
если не охота заморачиваться, то перед date ставь @, т.е.  @date

а вот код, который отображает именно твою дату
$myrow44['bloc_date']= '16.06.2010 13:07:05';
if (function_exists('date_default_timezone_set'))
date_default_timezone_set('Europe/Moscow');
$date = date('d.m.Y h:i:s',strtotime($myrow44['bloc_date']));
echo $date;
заключи $myrow44['bloc_date'] в strtotime()

logic

#3
Цитата: epmak от 2010 Июнь 21, 06:11  на самом деле у вафлана отключен показ варнингов


как решить читаем тут
если не охота заморачиваться, то перед date ставь @, т.е.  @date

а вот код, который отображает именно твою дату
$myrow44['bloc_date']= '16.06.2010 13:07:05';
if (function_exists('date_default_timezone_set'))
date_default_timezone_set('Europe/Moscow');
$date = date('d.m.Y h:i:s',strtotime($myrow44['bloc_date']));
echo $date;
заключи $myrow44['bloc_date'] в strtotime()
Тоже самое, 1970 год.
Если как ты написал то все ок, но если убрать первую строчку, то 1970 год показывает.
тоесть:
if (function_exists('date_default_timezone_set'))
date_default_timezone_set('Europe/Moscow');
$date = date('d.m.Y h:i:s',strtotime($myrow44['bloc_date']));
echo $date;
//01.01.1970 03:00:00

epmak

#4
ты проверял, что в $myrow44['bloc_date'] ? мож она пустая?
и в базе какой тип у столбца?
и что значит
ЦитироватьЕсли как ты написал то все ок, но если убрать первую строчку, то 1970 год показывает.

то есть ошибка исчезла, но год не стал норм показывать? или что?

logic

Цитата: epmak от 2010 Июнь 21, 07:58  ты проверял, что в $myrow44['bloc_date'] ? мож она пустая?
и в базе какой тип у столбца?
и что значит


то есть ошибка исчезла, но год не стал норм показывать? или что?
В базе тип datetime.
Ты сделал просто заносом значения в в массив(1 строчка), а если его из базы тащить то выдаст 1970 год.
Если сделать так
$date = $myrow44['bloc_date'];
echo $date;
//Покажет следущее: 13 июн 2010 0:00

GrInYa

#6
из мсскуль время и дата пхп не читает так как там по дефолту формат другой

тебе поможет функция convert

convert(char(10),<my_date_column>,104)

а дальше в пхп меняем формат с помощью strtotime и работаем с функцией date($type, $date) либо на прямую

logic

Цитата: GrInYa от 2010 Июнь 21, 10:50  из мсскуль время и дата пхп не читает так как там по дефолту формат другой

тебе поможет функция convert

convert(char(10),<my_date_column>,104)

а дальше в пхп меняем формат с помощью strtotime и работаем с функцией date($type, $date) либо на прямую
Гриня convert(char(10),<my_date_column>,104) это куда не понял? В бзау или пхп?
и в $type заносить "d m Y H:i:s" ?

GrInYa

а разве не видно что convert это скуль фунция?...в запросе ставь

да в $type то и надо поставить

logic

#9
Цитата: GrInYa от 2010 Июнь 21, 17:51  а разве не видно что convert это скуль фунция?...в запросе ставь

да в $type то и надо поставить
Блин) Покажи на примере convert этот, а то не допру
так? $block = mssql_query("SELECT convert(char(10),<bloc_date>,104) FROM  BLOCKING ",$db);

Deathless

1. Какой СКЛ?
2. Что написано в колонке?

<?
echo date("d.m.Y H:i",strtotime($myrow44['bloc_date']));
echo date("d.m.Y H:i",$myrow44['bloc_date']);
echo $myrow44['bloc_date'];
?>

Одно из трёх точно будет работать.

logic

Цитата: Deathless от 2010 Июнь 21, 19:36  1. Какой СКЛ?
2. Что написано в колонке?

<?
echo date("d.m.Y H:i",strtotime($myrow44['bloc_date']));
echo date("d.m.Y H:i",$myrow44['bloc_date']);
echo $myrow44['bloc_date'];
?>

Одно из трёх точно будет работать.
Не работают, позже попробую по методу грини, мне кажется он прав

GrInYa

#12
так
$block = mssql_query("SELECT convert(char(10),bloc_date,104) FROM  BLOCKING ",$db);

Цитата: Deathless от 2010 Июнь 21, 18:36  1. Какой СКЛ?
2. Что написано в колонке?

<?
echo date("d.m.Y H:i",strtotime($myrow44['bloc_date']));
echo date("d.m.Y H:i",$myrow44['bloc_date']);
echo $myrow44['bloc_date'];
?>

Одно из трёх точно будет работать.
неодна небудет работать без скуль конверта

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

Цитата: logic от 2010 Июнь 21, 19:42  позже попробую по методу грини, мне кажется он прав
если бы знал что это не так, я и не написал бы :)

Sweng

Используй апаче повыше версией будет всё нормально.

Deathless

Цитата: GrInYa от 2010 Июнь 22, 09:28  неодна небудет работать без скуль конверта
O_o
ПХП-кодер...

Если в колонку записывается время в *-никсовом формате, то всё работает идеально (проверено на 2000/2005 скл).

GrInYa

#15
Цитата: Deathless от 2010 Июнь 22, 15:04  O_o
ПХП-кодер...

Если в колонку записывается время в *-никсовом формате, то всё работает идеально (проверено на 2000/2005 скл).
o_O невнимательный ты
Цитироватьиз мсскуль время и дата пхп не читает так как там по дефолту формат другой
я имел в веду кодировку
Цитироватьа в последней просто иероглифы будут показать в месяце

Deathless

Понял, тогда вот скрипт из ММВ:

/////// Start Time Format ///////
function time_format($date,$format) {
// Support SQL 2000(Rus) and 2005
$formated_time = "d M Y, T";
$date_row = explode(" ",$date);

if(!preg_match("/^d*$/",$date_row[1])) {
$day = $date_row[0];
$month = $date_row[1];
$year = $date_row[2];
$time = $date_row[4];

if($month=='янв') {$month="Jan";} elseif($month=='фев') {$month="Feb";}
elseif($month=='мар') {$month="Mar";} elseif($month=='апр') {$month="Apr";}
elseif($month=='май') {$month="May";} elseif($month=='июн') {$month="Jun";}
elseif($month=='июл') {$month="Jul";} elseif($month=='авг') {$month="Aug";}
elseif($month=='сен') {$month="Sep";} elseif($month=='окт') {$month="Oct";}
elseif($month=='ноя') {$month="Nov";} else {$month="Dec";}
}
else {
$day = $date_row[1];
$month = $date_row[0];
$year = $date_row[2];
$time = $date_row[4];
}

$formated_time = str_replace("d",$day,$formated_time);
$formated_time = str_replace("M",$month,$formated_time);
$formated_time = str_replace("Y",$year,$formated_time);
$formated_time = str_replace("T",$time,$formated_time);

$end_time = date($format, strtotime($formated_time));
return $end_time;
}
/////// End Time Format ///////

<?
echo time_format($myrow44['bloc_date'],"d M Y");
?>

Sweng

Цитата: Deathless от 2010 Июнь 23, 17:14  Понял, тогда вот скрипт из ММВ:

/////// Start Time Format ///////
function time_format($date,$format) {
// Support SQL 2000(Rus) and 2005
$formated_time = "d M Y, T";
$date_row = explode(" ",$date);

if(!preg_match("/^d*$/",$date_row[1])) {
$day = $date_row[0];
$month = $date_row[1];
$year = $date_row[2];
$time = $date_row[4];

if($month=='янв') {$month="Jan";} elseif($month=='фев') {$month="Feb";}
elseif($month=='мар') {$month="Mar";} elseif($month=='апр') {$month="Apr";}
elseif($month=='май') {$month="May";} elseif($month=='июн') {$month="Jun";}
elseif($month=='июл') {$month="Jul";} elseif($month=='авг') {$month="Aug";}
elseif($month=='сен') {$month="Sep";} elseif($month=='окт') {$month="Oct";}
elseif($month=='ноя') {$month="Nov";} else {$month="Dec";}
}
else {
$day = $date_row[1];
$month = $date_row[0];
$year = $date_row[2];
$time = $date_row[4];
}

$formated_time = str_replace("d",$day,$formated_time);
$formated_time = str_replace("M",$month,$formated_time);
$formated_time = str_replace("Y",$year,$formated_time);
$formated_time = str_replace("T",$time,$formated_time);

$end_time = date($format, strtotime($formated_time));
return $end_time;
}
/////// End Time Format ///////

<?
echo time_format($myrow44['bloc_date'],"d M Y");
?>
Этот скрипт на ММВ работает только на последних версиях апаче, на первых он не пашет фигню показывает.

Deathless

Цитата: Sweng от 2010 Июнь 23, 15:52  Этот скрипт на ММВ работает только на последних версиях апаче, на первых он не пашет фигню показывает.

Вот до сих пор не понимаю, откуда у вас столько проблем?
Собрал сборочку из новейшего PHP (php.net) и Apache (apache.org) - и живёшь счастливо.
Ничего лишнего, только модули нужные подключить надо.

logic

Ну вот сделал я вот так:

$time = mssql_query("SELECT convert(char(10),DisConnectTM,104) FROM MEMB_STAT  ",$db);
$row = mssql_fetch_array($time);
echo date("d.m.Y H:i",$row['DisConnectTM']);

почему выдает 01.01.1970 03:00?

Похожие темы (5)