2008-12-11 1 views
6

У меня есть таблица mysql, которая полагается на отметку времени эпохи unix, эквивалентную дате записи, для сортировки и фильтрации в различных частях веб-сайта. Я пытаюсь реализовать средство выбора даты, которое будет вводить дату в поле формы в формате mm/dd/yyyy. Я пытаюсь преобразовать эту дату в формат unix epoch, чтобы добавить эту запись в поле строки. Все попытки, которые я сделал, привели к созданию метки времени текущего дня. Кто-нибудь знает, как я могу принять этот формат даты и преобразовать его в эквивалентную временную метку эпохи?mm/dd/yyyy формат в эпоху с PHP

Заранее спасибо.

Дополнительная информация:

Я пытался указываете ей, и все это я получаю сегодняшнюю эпоху. Извиняюсь, я должен был добавить код раньше, чтобы лучше объяснить:

Форма идентификатор «дата» Поле базы данных «эпоха»

Вот что я пытаюсь (неудачно), когда я выкладываю на дату :

$epochhold = ($_POST['date']); 
$epoch = mktime(0,0,0,$epochhold); 

я понял из предыдущего поста, что это будет по-прежнему представлять значение в мм/дд/гггг, а не мм, дд, гггг, как ожидает, указываете ей, однако пост не предлагал и решение о том, как сделай это. Я попробовал str_replace, чтобы изменить «/» на «,», и это вызвало тот же результат - получение сегодняшней эпохи, независимо от введенной даты.

Вот что пример кода - опять-таки это не сработало, но я добавляю это, чтобы проиллюстрировать то, что я пытался

$epochhold = ($_POST['date']); 
$epochold2 = str_replace('/', ', ', $epochhold) 
$epoch = mktime(0,0,0,$epochhold2); 

Спасибо за предыдущий ответ, а я не хочу, чтобы быстро ответ остался незамеченным!

Спасибо всем!

Спасибо всем за ответы - strtotime, похоже, работает лучше всего на начальных тестах и ​​может быть способом идти, поскольку этот формат является последовательным на всем сайте. Но все предложения помогли с этим несколько других вещей, так что спасибо всем вам снова!

+0

Вам нужно будет разобрать $ epochhold на 3 переменные, а затем передать все три в mktime. Вы не можете просто передать один аргумент и ожидать, что PHP разделит его на три! Я бы предложил функцию split(). – 2008-12-11 17:15:27

ответ

9

Если вы знаете, что он всегда будет в этом формате, strtotime преобразует его непосредственно в временную метку unix.

strtotime($_POST['app_date']); 

HTH!

+0

Кроме того, не забудьте проверить ввод: strtotime ('15/05/2008 ') - `FALSE`, а не` 1210802400`. – Piskvor 2008-12-11 16:50:12

2

Вы должны посмотреть на функцию mktime(). Пара, которая с регулярными выражениями или strtotime(), и вы ее получите.

0
if (! preg_match('#\d{2}/\d{2}/\d{4}#', $_POST['date'])) { 
    // complain about invalid input 
} 

list($m, $d, $y) = explode('/', $_POST['date']); 
$timestamp = mktime(0, 0, 0, $m, $d, $y); 
0

Вам понадобится отправить dd, mm, yyyy в качестве отдельных vars в mktime. Он принимает значение в $ epochold2 как одну строку, которая была бы недопустимой для mktime.

Ваш лучший выбор - использовать strtotime, как я уже говорил, или следовать совету Ant P, используя mktime.

0

strtotime() будет анализировать информацию о любом формате даты и возвращать отметку времени Unix.Все, что вам нужно сделать, это передать ему вашу дату/время строка:

$unix_time = strtotime($_POST['date']); 
if($unix_time < 0) { 
    //error case 
} 
else { 
    //value OK! 
} 

Как вы можете видеть выше, вы можете даже использовать его, чтобы помочь подтвердить ввод - если пользователь вводит дату как 02/31/2008, он вернет -1.