У меня есть таблица mysql, которая полагается на отметку времени эпохи unix, эквивалентную дате записи, для сортировки и фильтрации в разных частях веб-сайта. Я пытаюсь реализовать средство выбора даты, которое будет вводить дату в поле формы в формате mm / dd / yyyy. Я пытаюсь преобразовать эту дату в формат unix epoch, чтобы добавить эту запись в поле строки. Все попытки, которые я сделал, привели к созданию метки времени текущего дня. Кто-нибудь знает, как я могу принять этот формат даты и преобразовать его в эквивалентную временную метку эпохи?
Заранее спасибо.
Дополнительная информация:
Я пытаюсь mktime, и все, что я получаю, это сегодняшняя эпоха. Извинения, я должен был добавить код раньше, чтобы лучше объяснить:
Идентификатор формы – это «дата». Поле базы данных «эпоха»
Вот что я пытаюсь (неудачно), когда я публикую дату:
$epochhold = ($_POST['date']); $epoch = mktime(0,0,0,$epochhold);
Я понял из предыдущего сообщения, что это все равно будет передавать значение как mm / dd / yyyy, а не mm, dd, yyyy, как ожидается в mktime, однако сообщение не предложило и не решило, как это сделать. Я попробовал str_replace, чтобы изменить «/» на «,», и это вызвало тот же результат – получение сегодняшней эпохи, независимо от введенной даты.
Вот пример кода – снова это не сработало, но я добавляю его, чтобы помочь проиллюстрировать, что я пробовал
$epochhold = ($_POST['date']); $epochold2 = str_replace('/', ', ', $epochhold) $epoch = mktime(0,0,0,$epochhold2);
Спасибо за предыдущий ответ, я не хотел, чтобы быстрый ответ оставался незамеченным!
Всем спасибо!
Спасибо всем за ответы – strtotime, похоже, работает лучше всего на начальных тестах и может быть способом идти, поскольку этот формат является последовательным на всем сайте. Но все предложения помогли с этим несколько других вещей, так что спасибо всем вам снова!
Если вы знаете, что он всегда будет в этом формате, strtotime преобразует его непосредственно в timestamp unix.
strtotime($_POST['app_date']);
НТН!
Вы должны посмотреть на функцию mktime () . Пара с регулярными выражениями или strtotime () , и вы получите его.
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);
Вам нужно будет отправить dd, mm, yyyy в качестве отдельных vars в mktime. Он принимает значение в $ epochold2 как одну строку, которая была бы недопустимой для mktime.
Лучше всего использовать strtotime, как я уже говорил, или следовать совету Ant P, используя mktime.
strtotime () будет анализировать практически любой формат даты и возвращать отметку времени Unix. Все, что вам нужно сделать, это передать ему строку даты / времени:
$unix_time = strtotime($_POST['date']); if($unix_time < 0) { //error case } else { //value OK! }
Как вы можете видеть выше, вы можете использовать его для подтверждения ввода – если пользователь вводит дату, например, 02/31/2008, она вернет -1.