Вопрос

У меня есть таблица 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 работает лучше всего на первоначальных тестах, и, возможно, это лучший вариант, поскольку этот формат единообразен на всем сайте.Но все предложения помогли с этим, и еще несколько вещей — все хорошо, так что еще раз всем спасибо!

Это было полезно?

Решение

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

strtotime($_POST['app_date']);

ХТХ!

Другие советы

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

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);

Ты собираешься нужно послать дд, мм, гггг, как отдельными переменными, чтобы указываете ей. Он принимает значения в $ epochold2 в одну строку, которая была бы недопустима для указываете ей.

Лучше всего было бы использовать StrToTime как я ранее, или последовать совету Ant P, используя указываете ей.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top