проблем с date()

11 отговора 188 прегледа
#1

проблем с date()

Опитвам се да изчисля възрастта на всеки регистриран юзър. За целта използвам:

echo date("y", mktime(0,0,0, date(m) - $month, date(d) - $day, date(Y) - $year));

и всичко би трябвало да работи нормално, но когато задам стойност на $year в интервала 1932 - 1962 получавам съобщение за "неочаквана грешка в date()"

пробвах само да пресмятам годините:
echo date(Y) - $year;

същия проблем за същите години.

къде ми е грешката?

Отговор
в отговор на $burov #2

Re: проблем с date()

a pod 1932 godina stava li neshto ?

Отговор
в отговор на ralev #3

Re: проблем с date()

работи, дори с години от порядъка на 18ХХ, понякога пак дава грешки, но в повечето случай работи. На мен ми трябват всчики години от 19ХХ до днес, обаче между 1932 и 1962 изкарва "неочаквана грешка в date()"

Отговор
в отговор на $burov #4

Re: проблем с date()

deeebi
vsi4kite li si gi probbval be...

Doydoh nerazbran
Trugnah si nerazbran
Samo edin me razbra
i To pogre6no
Отговор
в отговор на SBD #5

Re: проблем с date()

Всичките съм ги пробвал! Една след друга

Хайде сега сериозно, кажете как да проработи.

Отговор
в отговор на $burov #6

Re: проблем с date()

мисля че грешката е тук

int mktime ( int hour, int minute, int second, int month, int day, int year [, int is_dst] )

Returns the Unix timestamp corresponding to the arguments given. This timestamp is a long integer containing the number of seconds between the Unix Epoch (January 1 1970) and the time specified.

според мен е по добре да си направиш твоя функция ;)

...
Отговор
в отговор на Цвeтaн Цвeтkoв #7

Re: проблем с date()

В такъв случай защо получавам вярни резултати за годините между 1963 и 1970 ?

Отговор
в отговор на Цвeтaн Цвeтkoв #8

мдаам...началото на времето

С почти пълна сигурност резултатите преди 1970-та са грешни!

"Да живееш - значи да се променяш." - Анатол Франс
Отговор
в отговор на Dakota #9

Re: мдаам...началото на времето

ето това връща като резултат 37:

echo date('y', mktime(0,0,0, date(m) - 6, date(d) - 23, date(Y) - 1965));

а това е което успях да измисля като решение на проблема:

if((date(m) > $a[bmonth]) || (date(m) == $a[bmonth] && date(d) < $a[bday]))
{
echo date(Y) - $a[byear];
}
else
{
echo date(Y) - $a[byear] - 1;
}

Редактирано от $burov на

Отговор
в отговор на $burov #10

Re: проблем с date()

Не можеш да го направиш като използваш mktime, защото имаш следните ограничения:
Returns the Unix timestamp corresponding to the arguments given. This timestamp is a long integer containing the number of seconds between the Unix Epoch (January 1 1970) and the time specified.

---
"Внимавай какво правиш през живота си, защото смъртта е вечна и не знаеш какво те очаква ..."
Отговор
в отговор на $burov #11

Ето ти един малък пример

Това измислих за 20-ина минути, не е много тествано, но мисля че ще ти свърши работа :)))

<?php
$meseci = array("1"=>"31", "2"=>"28", "3"=>"31", "4"=>"30", "5"=>"31", "6"=>"30",
"7"=>"31", "8"=>"31", "9"=>"30", "10"=>"31", "11"=>"30", "12"=>"31");

$year = 1976;
$month = 12;
$day = 28;

$cDay = date(d);
$cMonth = date(m);
$cYear = date(Y);

if ($cDay < $day) {
$cDay = $cDay + $meseci[$month];
if ($cMonth == 1) {
$cMonth = 12;
--$cYear;
}
else {
--$cMonth;
};
};
// Пресмята деня
$day = $cDay - $day;

if ($cMonth < $month) {
$cMonth = $cMonth + 12;
--$cYear;
}
// Пресмята месеца
$month = $cMonth - $month;
// Пресмята годината
$year = $cYear - $year;

echo "Atakmim е на $year години, $month месеца и $day дни ;)";
?>

atakmim.fashion.bg

---
"Внимавай какво правиш през живота си, защото смъртта е вечна и не знаеш какво те очаква ..."
Отговор
в отговор на $burov #12

Re: проблем с date()

zashto oshte na SQL nivo ne si izchislish vazrastta na usera.

SELECT ..., YEAR(NOW()) - YEAR(u.birthdate) as age , .... FROM user u, ......

There are only 10 types of people in this world: those who understand binary and those who don't
Отговор