Проблема с датой

Ashotovich

Новичок
Проблема с датой

Всем привет.
У меня в форме стоит ActiveX-календарь, который передает дату в формате mm/dd/yyyy:

PHP:
<object classid="CLSID:8E27C92B-1264-101C-8A2F-040224009C02" name="birth_date" width="200" height="200">
<param name="Year" value="<? print $birth_year; ?>">
<param name="Month" value="<? print $birth_month; ?>">
<param name="Day" value="<? print $birth_day; ?>">
</object>
При сабмите форма передает сама себе все знаечения, в т. ч. и дату из ActiveX-календаря. Я эту дату обрабатываю при помощи вот такого вычисления, дабы получить $birth_year, $birth_month и $birth_day и подставить их в объект календаря (см. выше):
PHP:
$birth_date = $_POST['birth_date'];
$s1=strpos($birth_date, "/");
$s2=strrpos($birth_date, "/");
$birth_year=substr($birth_date, $s2+1, 4);    
$birth_month=substr($birth_date, 0, $s1);
$birth_day=substr($birth_date, $s1+1, $s2-$s1-1);
На большинстве клиентских машин это дело работает нормально, но вот у некоторых сбивается год - может и 2054 в итоге в базу записать. Ума не приложу - в чем может быть проблема, и как ее решить?

Да, сразу оговорюсь, что применение ActiveX-календаря очень выгодно в плане размера страницы, т.к. сам объект календаря занимает 300 байт в HTML и мне бы не хотелось без серьезной необходимости отказываться от такого решения. Еще стоит обозначить, что использование date() невозможно вследствие того, что даты могут быть и до 1970 года.
 

Ashotovich

Новичок
Гоша, насчет explode - это я точно лоханулся. ;) А вот причем здесь strtotime, ежели "strtotime() only works reliable arround the current date without implementation side-effects, it looks like this is currently the area *1970-01-01* to *2038-01-19* (dates in ISO format without *. The german PHP online manual says, it should work from 1901-12-14 without problem, which is not true)." - не понимаю.
 

Линк

Guest
на свете бывает не только IE
да и юзвери очень любят отвечать "ДА" на вопрос о безопастной страницы
 

Ashotovich

Новичок
Линк, данный проект - внутрикорпоративный, так что никаких "не только IE" быть не может, в том-то все и дело.
А про безопасность - тогда просто ActiveX не станет отображаться. Но он ведь отображается!
 

гоша

Guest
На большинстве клиентских машин это дело работает нормально, но вот у некоторых сбивается год - может и 2054 в итоге в базу записать.
Попробуйте описать проблему вменяемо, по пунктам.

1) я делаю то-то и то-то (код, мало).
2) ожидаемый результат
3) реальный результат

> тогда просто ActiveX не станет отображаться

читайте хелп к ие, раздел настройки безопасности.
 

Ashotovich

Новичок
У четырех человек из тридцати при вводе даты, допустим, 02/02/1965, в итоге в базу попадает 02/02/2065. При этом все они в один голос говорят, что ставят 1965. Код я уже привел. В базу это все кладется следующими операциями:
PHP:
$birth_date = $birth_year."-".$birth_month."-".$birth_day;

$query = "INSERT INTO persons VALUES ('','$persontype_id','$user_id','$organization_id','$position_id', '$last_name','$first_name','$patr_name','$importance','$birth_date','$phone_1','$phone_2','$comments','1')";
mysql_query($query) or die("<br>Processing person data failed<br>");
Я просто пытаюсь понять, где эти глюки могут вылезать. Ясно, что не на стороне сервера... Но что такого может быть на клиентской машине, что неправильно передается год?
 
Сверху