2015-09-25 1 views
2

Я много исследовал, но мне ничего не помогло. У меня есть 2 мнения: один для регистрации и еще один, чтобы редактировать свою информацию, если вы что-то забыли.Дата отображается неправильно, но это нормально в базе данных

Предположим, я написал в метке даты в следующем месяце и году: 98/9889 (да, я отставлен). Он будет отображаться правильно, но когда я получу свою информацию для его редактирования, он отображает 31/1219, но в моей базе данных все равно 98/9889. Есть идеи?

SIGN UP VIEW:

<label for="antitetanica">Data da última dose antitetânica:</label> 
<input type="text" id="antitetanica" name="antitetanica" value="echo date("m/Y", strtotime('antitetanica'))"/><br /><br> 

EDIT ВИД:

<label for="antitetanica">Data da última dose antitetânica:</label> 
<input type="input" name="antitetanica" id="antitetanica" value="<?php echo date("m/Y", strtotime('antitetanica')) ?>"/><br /><br> 

Btw я использовал тип DATE в моей базе данных, но теперь я использую VARCHAR 255.

EDIT: теперь используется тип DATE в моем db

EDIT 2: фактический код выглядит следующим образом (извините, первый раз работает с DateTime):

SIGN UP VIEW:

<input type="input" id="antitetanica" name="antitetanica" value=" 
<?php $date = date_create_from_format('m/Y', $antitetanica)->format('m/Y'); ?>" /><br /><br> 

EDIT VIEW:

<label for="antitetanica">Data da última dose antitetânica:</label> 
<input type="input" name="antitetanica" id="antitetanica" value="<?php $date = new DateTime($antitetanica); echo $date->format('m/Y'); ?>" /><br /><br> 
+6

Почему вы используете varchar для дат в первую очередь? –

+0

Я только что вернулся к типу даты, но не решил проблему для меня, heh – raphata

+1

, потому что MySQL хранит его как YYYY-mm-dd ;-) https://dev.mysql.com/doc/refman/5.5 /en/date-and-time-functions.html –

ответ

0

Поскольку strtotime не распознает «antitetanica» («столбняк») как действительную дату:

PHP strtotime

Даже если предположить, что вы пропустили «$» от начала этой строки и фактически пытаются накормить StrToTime строковое значение, которое пришло из базы данных - это не то, что он нужен. Вы не можете прокормить его 98/9889 и надеяться получить действительную дату.

EDIT

Вы имели право идея - но strtotime был неправильный путь, чтобы создать объект даты.

Если ваш ввод «03/2013», вам необходимо преобразовать его в действительный объект даты, с которым может работать PHP.Вы делаете это с DateTime::createFromFormat();

$date = DateTime::createFromFormat('m/Y', '03/2013'); //<< Object-Oriented Style 

или

$date = date_create_from_format('m/Y', '03/2013'); //<< Procedural Style 

После того, как у вас есть объект даты, вы можете вывести его в любом формате вы хотите:

$date->format('m/Y'); //<< Object 

или

date_format($date, 'm/Y'); //<< Procedural 

So - i п исходный вопрос (хранение даты в виде строки в базе данных), это будет выглядеть так:

echo date_create_from_format('m/Y', $antitetanica)->format('m/Y'); 

Но теперь, когда у вас есть реальный объект DATE в базе данных, это утверждение выглядит примерно так:

echo date_create_from_format('Y-m-d', $antitetanica)->format('m/Y'); 

Это НЕ идеальный способ сделать это ... но я рисую картину для вас здесь.

Лучший способ работы с датами теперь, когда у вас есть фактические даты в вашей базе данных, является с DateTime

При извлечении данных из базы данных, вы можете сделать что-то вроде:

$date = new DateTime($antitetanica); //<< (where $antitetanica = "2013-03-01") 

echo $date->format('m/Y'); //<< "03/2013" 

SO - Как получить дату от пользователя в первую очередь?

Существует несколько способов сделать это. Вы можете заставить пользователя ввести дату с помощью нескольких элементов формы «выбор» или нескольких элементов формы «текст» или одного элемента формы «текст», и каждый из этих способов нужно будет обрабатывать по-разному в PHP.

Предположим, вы решили ввести пользователя в поле «03/2013» в одно текстовое поле. Над на стороне сервера вещей, вы должны следовать точно те же шаги, что и выше - то есть:

  1. Преобразовать пользовательский ввод действительного объекта DateTime
  2. Формат и вставить дату в вашу базу данных

Итак:

$date = DateTime::createFromFormat('m/Y', $userInput); 

INSERT INTO myTable (antitetanica) VALUES ('$date->format('Y-m-d')') //<< Pseudocode 

как 2 текстовые поля ввода, которые могли бы выглядеть следующим образом:

$date = DateTime::createFromFormat('m/Y', $userMonth . '/' . $userYear); 

INSERT INTO myTable (antitetanica) VALUES ('$date->format('Y-m-d')') //<< Pseudocode 
+0

Хм, понял. Любое предложение о том, как я могу назвать дату в моей базе данных? И спасибо за объяснение про строя – raphata

+0

Прежде всего, ваше описание того, какое значение вы храните точным? Вы НАСТОЯТЕЛЬНО сохраняете 98/9889? Если да, то что вы пытаетесь представить с этим? – Ragdata

+0

Я только что подписался, используя 03/2013, и он появился как 31/1219. Кажется, я получил 0000-00-00 в моей базе данных. – raphata

Смежные вопросы