鍍金池/ 問答/Java  PHP/ php如何判斷27,28,29,30,1,2,3,5類似這樣的一串日期是否連續(xù),

php如何判斷27,28,29,30,1,2,3,5類似這樣的一串日期是否連續(xù),需要處理好跨年跨月閏月的問題?

開發(fā)一個(gè)簽到模塊,簽到周期為30天,現(xiàn)有需求連續(xù)簽到多少天后有獎(jiǎng)勵(lì)可以領(lǐng)取,如果中間有一天斷簽,則記連續(xù)簽到從0開始,每30天算一個(gè)周期,如何判斷是否連續(xù),并判斷連續(xù)的時(shí)長滿不滿足要求

回答
編輯回答
哚蕾咪

date_diff可以得出兩個(gè)日期相距的天數(shù),將之與大于某個(gè)日期的打卡次數(shù)比較,就知道這段日期內(nèi)是否有打滿卡

2018年8月29日 20:29
編輯回答
墨小羽

不能換一種思路嗎?

比如單獨(dú)設(shè)計(jì)一個(gè) XX簽到表
字段:id-uid-time

用戶簽到動(dòng)作時(shí):

  1. 今天是否已簽到過? Y -> false;
  2. 簽到。(寫入一條新數(shù)據(jù)到庫中)
  3. 判斷是否連續(xù) X 天簽到? Y -> 發(fā)放獎(jiǎng)勵(lì)。

至于如何判斷連續(xù) 7 天簽到,我這提供一個(gè)思路,僅供參考:
判斷用戶簽到表中最近 7 條數(shù)據(jù)是否均為 7 天內(nèi)的數(shù)據(jù)。哈哈逃(其實(shí)是可行的)。

    // 獲取7天前的凌晨的時(shí)間戳
    $seven_days_ago = strtotime('-7 days');
    $seven_days_ago = mktime(0, 0, 0, date('m', $seven_days_ago), date('d', $seven_days_ago), date('Y', $seven_days_ago));
    echo $seven_days_ago;

所以,重點(diǎn)還是思路。。。

2018年7月5日 17:57
編輯回答
真難過

只需把上次簽到和本次簽到的日期對比一下就可以了吧。

2017年11月6日 11:27
編輯回答
呆萌傻

在做簽到累加的時(shí)候就做判斷,當(dāng)前簽到的日期是不是最后簽到日期+1,如果是那就做累加,不是就重置為0
至于如何判斷“當(dāng)前簽到的日期等于最后簽到日期+1”,給你個(gè)示例代碼:

$lastDateHistory = '2012-02-29'; // 假設(shè)這是從記錄中取出的最后一次簽到日期
$currentDate = '2012-03-01'; // 手動(dòng)假寫當(dāng)前日期,實(shí)際應(yīng)該等于 date('Y-m-d');
echo date('Y-m-d',strtotime("$currentDate -1 day")); // 返回值是當(dāng)前日期的前一天

2017年11月29日 01:58
編輯回答
爆扎

將相鄰的日期換算成格林尼治毫秒數(shù)相減 如果等于86400000說明連著打卡了 大于說明中斷

2018年4月5日 13:11
編輯回答
擱淺

簽到的時(shí)候拿出上一次簽到的日期

如果是昨天以前肯定斷了
如果是昨天,今天簽到,那就接上了

另外數(shù)據(jù)表新增一個(gè)連續(xù)簽到天數(shù),只要沒斷,就在上次的基礎(chǔ)上加1,斷了就重新來

2017年6月28日 22:11