true, 'modified' => true, 'record_date' => true, 'amount' => true, 'record_date' => true, 'state_user' => true ]; protected $_virtual = ['decay']; private function convertToTimestamp($dateOrTime) { if(method_exists($dateOrTime, 'getTimestamp')) { return $dateOrTime->getTimestamp(); } else { return $dateOrTime->i18nFormat(Time::UNIX_TIMESTAMP_FORMAT); } } protected function _getDecay() { // decay factor in seconds per year // q = e^((lg Kn - lg K0) / n) // 0.999999978 // // SELECT TIMESTAMPDIFF(SECOND, modified, CURDATE()) AS age_in_seconds from state_balances // decay_for_duration = decay_factor^seconds // decay = gradido_cent * decay_for_duration $decay_duration = intval(Time::now()->getTimestamp() - $this->convertToTimestamp($this->record_date)); if($decay_duration === 0) { return $this->amount; } return $this->amount; //return $this->amount * pow(0.99999997802044727, $decay_duration); } public function partDecay($target_date) { $decay_duration = intval($this->convertToTimestamp($target_date) - $this->convertToTimestamp($this->record_date)); if($decay_duration <= 0) { return $this->amount; } return 0; //return $this->amount * pow(0.99999997802044727, $decay_duration); } public function decayDuration($target_date) { return intval($this->convertToTimestamp($target_date) - $this->convertToTimestamp($this->record_date)); } }