мм / дд / гггг формат на эпоху с PHP

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

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

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

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

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

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

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

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

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

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

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

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

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

11.12.2008 15:46:21
Вам нужно будет разобрать $ epochhold на 3 переменные и затем передать все три в mktime. Вы не можете просто передать один аргумент и ожидать, что PHP разделит его на три! Я бы предложил функцию split ().
Vilx- 11.12.2008 17:15:27
5 ОТВЕТОВ
РЕШЕНИЕ

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

strtotime($_POST['app_date']);

НТН!

11
11.12.2008 16:16:12
Кроме того, не забудьте проверить ввод: strtotime ('15 / 05/2008 ') FALSE, а не 1210802400.
Piskvor left the building 11.12.2008 16:50:12
strtotime - отличный эквалайзер дат в PHP
TravisO 11.12.2008 17:51:46

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

2
11.12.2008 15:52:56
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
11.12.2008 16:21:08

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

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

0
11.12.2008 16:38:45

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

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

Как вы можете видеть выше, вы можете даже использовать его для проверки правильности ввода - если пользователь вводит дату, такую ​​как 31.02.2008, он вернет -1.

0
11.12.2008 17:01:25