Дата PHP - строка в метку времени - PullRequest
0 голосов
/ 22 октября 2011

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

Я хочу, чтобы мой пользователь мог вводить January 2, 2011 или 1-2-11, и все равно получал 2011-01-02 12:00:00 для сохранения в базе данных.

В настоящее время у меня есть это на месте:

$post_date = date("Y-m-d H:i:s", strtotime(stripslashes($_POST['post_date'])));

Но кажется, что strtotime возвращает 0, потому что datetime заканчивается как 1969-12-31 17:00:00

Что мне нужно изменить?


ОБНОВЛЕНИЕ

От php.net:

(PHP 4, PHP 5)

strtotime - анализирует любое текстовое описание даты и времени на английском языке в метку времени Unix.

.. Я думаю, что нет!


Я не пытаюсь strtotime (массив:

if(isset($_POST['post_date'])){
                foreach($_POST['post_date'] as $id => $post_date){
                    print $post_date.'<br />';
                    if(strlen(trim($post_date)) && $post_date !== 'Date posted'){
                        $update_data[$id]['post_date'] = date("Y-m-d H:i:s", strtotime(stripslashes($post_date)));
                    }
                }
            }

Работает с:

if(isset($_POST['post_date'])){
                foreach($_POST['post_date'] as $id => $post_date){
                    print $post_date.'<br />';
                    if(strlen(trim($post_date)) && $post_date !== 'Date posted'){
                        $post_date = str_replace(',', '', $post_date);
                        $post_date = str_replace('-', '/', $post_date);
                        $update_data[$id]['post_date'] = date("Y-m-d H:i:s", strtotime(stripslashes($post_date)));
                    }
                }
            }

Благодаря нескольким авторам. Я удаляю запятые и заменяю дефисы косой чертой.

Ответы [ 3 ]

4 голосов
/ 22 октября 2011

Из комментариев ОП сказал:

$ _ POST ['post_date'] на самом деле массив (обновление нескольких записей), но примерным значением будет «31 декабря 2012 года»

Нельзя передавать запятую в аргументах strtotime одновременно со временем, при этом всегда будет возвращаться 1970-01-01 00:00:00. Вы должны удалить сгенерированную пользователем запятую.

$post_date = date("Y-m-d H:i:s", strtotime(stripslashes("1 January 1927 17:59")));
echo $post_date; //1927-01-01 17:59:00
2 голосов
/ 22 октября 2011

Вы действительно должны быть внимательны к своим данным, но вот идея.

foreach($_POST['input'] as $userDate) {
    // strtotime() will assume m/d/y or y-m-d depending on if '-' of '/' is used.
    $userDate = str_replace('-', '/', $userDate);
    $post_date = date("Y-m-d H:i:s", strtotime(stripslashes($userDate)));
}
1 голос
/ 22 октября 2011

В PHP 5.3.3+ (и, возможно, более старых версиях)

date('Y-m-d', strtotime('January 2, 2011'))

(обратите внимание, запятая там есть) даст вам 2011-01-02

Однако, когда вы добавляете час ис минуты до конца этой фразы даты, strtotime возвращает 0.

date('Y-m-d', strtotime('January 2, 2011 14:30'))

К сожалению, дает вам 1970-01-01 00:00:00 Уведомление: http://codepad.org/qgJIJSaw

Попробуйте удалить запятую:

$date = str_replace(',', '', $date);

Кроме того, strtotime преобразует '1-2-11' в 2001-02-11 (11 февраля 2001 г.), поэтому вам, возможно, потребуется изменить порядок чисел, если они соответствуют шаблону, используя что-то вроде:

 $date = preg_replace('#^([\d]{1,2})-([\d]{1,2})-([\d]{2,4})$#', '$3-$1-$2', $date);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...