PHP Zend формат даты

Я хочу ввести временную метку в формате ниже в базу данных.

yyyy-mm-dd hh:mm:ss

Как я могу получить в вышеуказанном формате?

Когда я использую

$date = new Zend_Date();

возвращает месяц дд, гггг чч: мм: сс пм

Я также использую календарь JavaScript для вставки выбранной даты, и она возвращается в формате дд-мм-гггг

Теперь я хочу преобразовать оба формата в гггг-мм-дд чч: мм: сс, чтобы их можно было вставить в базу данных. Поскольку формат даты не соответствует формату поля базы данных, дата не вставляется и заполняется только *00-00-00 00:00:00*

Спасибо за ответ

6 ответов

Решение

Не уверен, поможет ли это вам, но попробуйте использовать:

 // to show both date and time,
 $date->get('YYYY-MM-dd HH:mm:ss');

 // or, to show date only
 $date->get('YYYY-MM-dd') 

Technically, @stefgosselin gave the correct answer for Zend_Date, но Zend_Date is completely overkill for just getting the current time in a common format. Zend_Date is incredibly slow and cumbersome to use compared to PHP's native date related extensions. If you don't need translation or localisation in your Zend_Date output (and you apparently dont), stay away from it.

Используйте родной язык PHP date функция для этого, например,

echo date('Y-m-d H:i:s');

или DateTime процедурный API

echo date_format(date_create(), 'Y-m-d H:i:s');

или DateTime Object API

$dateTime = new DateTime;
echo $dateTime->format('Y-m-d H:i:s');

Не делайте типичную ошибку, используя каждый компонент, предлагаемый Zend Frameworks, только потому, что он его предлагает. В этом нет абсолютно никакой необходимости, и на самом деле, если вы можете использовать собственное расширение PHP для достижения того же результата с меньшими или сопоставимыми усилиями, вам лучше использовать собственное решение.

Кроме того, если вы собираетесь сохранить дату в своей базе данных, использовали ли вы какой-либо из столбцов, связанных с DateTime, в вашей базе данных? Предполагая, что вы используете MySql, вы можете использовать столбец Timestamp или столбец Date ISO8601.

Вот как я это сделал:

abstract class App_Model_ModelAbstract extends Zend_Db_Table_Abstract
{

    const DATE_FORMAT = 'yyyy-MM-dd';

    public static function formatDate($date, $format = App_Model_ModelAbstract::DATE_FORMAT)
    {
        if (!$date instanceof Zend_Date && Zend_Date::isDate($date)) {
            $date = new Zend_Date($date);
        }

        if ($date instanceof Zend_Date) {
            return $date->get($format);
        }

        return $date;
    }
}

Таким образом, вам не нужно беспокоиться о том, является ли это на самом деле экземпляром даты Zend, вы можете передать строку или что-нибудь еще, что является датой.

Простой способ использовать Zend Date - создать в своих бизнес-объектах определенную функцию, которая позволяет параметрировать эту функцию в формате даты. Вы можете найти хороший пример по этому адресу http://www.pylejeune.fr/framework/utiliser-les-date-avec-zend_date/

Это я сделал это:
Zend_Date::now->toString('dd-MM-yyyy HH:mm:ss')
выход из этого формата "24-03-2012 13:02:01"
и вы можете изменить свой формат даты

Я всегда использую $date->__toString('YYYY-MM-dd HH-mm-ss'); метод в прошлом, но сегодня не работал. Я получаю вывод по умолчанию "1 ноября 2013 12:19:23"

Итак, сегодня я использовал $date->get('YYYY-MM-dd HH-mm-ss'); как уже упоминалось выше. Кажется, решил мою проблему.

Вы можете найти более подробную информацию об этом в выходных форматах здесь: http://framework.zend.com/manual/1.12/en/zend.date.constants.html

Другие вопросы по тегам