мм / дд / гггг формат на эпоху с PHP - PullRequest
8 голосов
/ 11 декабря 2008

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

Ответы [ 5 ]

11 голосов
/ 11 декабря 2008

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

strtotime($_POST['app_date']);

НТН!

2 голосов
/ 11 декабря 2008

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

0 голосов
/ 11 декабря 2008

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

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

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

0 голосов
/ 11 декабря 2008

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

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

0 голосов
/ 11 декабря 2008
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);
...