2017-01-01 2 views
0

Я пытаюсь рассчитать две даты, дату за неделю до и дату через восемь недель после дня рождения пользователя.Получить верхнюю и нижнюю дату диапазонов для дня рождения в PHP

В нашем примере мы хотели бы предоставить пользователю доступ к некоторым специальностям в таймфрейме вокруг его дня рождения. 1 неделю до дня рождения до 8 недель после его рождения

e.g. #1 

User birthday: 1988-01-05 
Timeframe should be: YYYY-12-29 to YYYY-03-03 

Current Date: 
1) 2016-12-30 
2) 2017-01-01 
3) 2017-02-01 
4) 2016-12-28 
5) 2017-12-28 

Result should be: 
1) True 
2) True 
3) True 
4) False 
5) False 

e.g. #2 
User birthday: 1988-12-30 
Timeframe should be: YYYY-12-23 to YYYY-02-24 

Current Date: 
1) 2016-12-30 
2) 2017-01-01 
3) 2017-02-01 
4) 2016-12-28 
5) 2017-12-28 

Result should be: 
1) True 
2) True 
3) True 
4) True 
5) True 

Кто-нибудь пыталось сделать что-то подобное и может помочь мне здесь с каким-то простым примером, чтобы зажечь лампочку над головой?

+0

Вы изучали [carbon] (http://carbon.nesbot.com/docs/) вообще? Это отличная библиотека для работы с датами. –

+0

Дни рождения статичны в PHP или в БД? – chris85

+0

Все данные пользователя поступают из БД и представлены субъектом пользователя (дата рождения - поле DateTime) – Pointi

ответ

1

Это может быть легко достигнут с carbon library.

$dt = Carbon::create(1991, 1, 31, 0); // Set the birthday 
$dt->addWeeks(8); // Gives you a date 8 weeks after 
$dt->subWeek(); // Gives you a date 1 week before 

И тогда вам не придется иметь дело с сумасшедшим манипулированием даты, которая является огромной болью.

+0

Знаете ли вы, можно ли также проверить, находится ли СЕГОДНЯ в этот таймфрейм, игнорируя год? – Pointi

+1

Вы можете «Carbon :: create (currentYear, birthMonth, birthDay)», 'Carbon :: create (currentYear - 1, birthMonth, birthDay)', 'Carbon :: create (currentYear + 1, birthMonth, birthDay)' и с каждый из них добавляет 8 недель и вычитает 1. Затем просто проверьте, находится ли текущая дата в любом из этих трех диапазонов. –

+0

Правда, я думаю, что это сработает, попробуем это (но я думаю, что буду придерживаться PHP DateTime, не так уж и много). Но проблема в том, что мне также нужны настоящие Даты нижней и верхней границы, и это сводит меня с ума, чтобы выпустить настоящий год для этих Дат. – Pointi

Смежные вопросы