2017-01-01 9 views
0

私は2つの日付、1週間前の日付、およびユーザーの誕生日の8週間後の日付を計算しようとしています。PHPの誕生日の期間の上限と下限の日付を取得する

この例では、誕生日の周りの時間枠内で、いくつかのスペシャルへのアクセスをユーザーに許可したいと考えています。

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 

1週間彼の誕生日前に彼の誕生日後の週間までは、誰でも似たような達成するために、私の頭の上に電球を点灯するために、いくつかの基本的な例で、ここで私を助けることができますしようとしていますか?

+0

あなたは[carbon](http://carbon.nesbot.com/docs/)を調べましたか?これは、日付を扱う素晴らしいライブラリです。 –

+0

誕生日はPHPまたはDBで静的ですか? – chris85

+0

すべてのユーザーデータはDBから取得され、ユーザーエンティティによって表されます(生年月日は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

TODAYがこのタイムフレームにあるかどうかをチェックして、その年を無視することも可能ですか? – Pointi

+1

「Carbon :: create(currentYear、birthMonth、birthDay)」、「Carbon :: create(currentYear-1、birthMonth、birthDay)」、「Carbon :: create(currentYear + 1、birthMonth、birthDay)」とそれぞれ8週間追加して1を引いた後、現在の日付がこれらの3つの範囲のいずれかに入っているかどうかを確認します。 –

+0

真実、私はそれが動作すると思う、それを試してみるだろう(しかし、私は私がPHPのDateTimeに固執すると思います、それほど違いはありません)。 しかし問題は、私も上下限の実際の日付が必要であり、それはそれらの日付のために実際の年を出すことに私を夢中にさせる。 – Pointi

関連する問題