private function getIsOldWinIkalogAsAtTheTime($t) { if (!preg_match('/^([0-9a-f]{7,})_/', $this->version, $match)) { // なんかおかしい return false; } $ikalog = IkalogVersion::findOneByRevision($match[1]); if (!$ikalog) { // 知らない WinIkaLog だった return false; } if (empty($ikalog->winikalogVersions)) { // なぜか WinIkaLog のリリースされてないリビジョンっぽい(たぶん新しすぎて認識できてない) return $this->getIsOldCliIkalogAsAtTheTimeImpl($ikalog, $t); } $thisWinIkaLog = $ikalog->winikalogVersions[0]; if (static::$latestWinIkaLog === null) { static::$latestWinIkaLog = WinikalogVersion::find()->andWhere(['<=', '{{winikalog_version}}.[[build_at]]', date('Y-m-d H:i:sP', $t)])->orderBy('{{winikalog_version}}.[[build_at]] DESC')->limit(1)->one(); } if (static::$latestWinIkaLog->id === $thisWinIkaLog->id) { // これより新しいバージョンは存在しない return false; } $diff = $t - strtotime($thisWinIkaLog->build_at); return $diff >= 21 * 86400; }