WIKI使用導(dǎo)航
站長(zhǎng)百科導(dǎo)航
站長(zhǎng)專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機(jī)
- cPanel
- 網(wǎng)址導(dǎo)航專題
- 云計(jì)算
- 微博營(yíng)銷
- 虛擬主機(jī)管理系統(tǒng)
- 開(kāi)放平臺(tái)
- WIKI程序與應(yīng)用
- 美國(guó)十大主機(jī)
Drupal:計(jì)算折舊和評(píng)價(jià)
這里有不少被用來(lái)計(jì)算直線折舊(straight-line depreciation)和給定節(jié)點(diǎn)當(dāng)前估算價(jià)格的代碼片段。
用戶輸入CCK字段(user input CCK fields)為2個(gè)日期(需要日期模塊(date module))和2個(gè)價(jià)格: 1. purchase_date (iso日期格式) 2. expire_date (iso日期格式) 3. purchase_value (小數(shù)格式) 4. expire_value (小數(shù)格式) - 當(dāng)物品達(dá)到使用壽命時(shí)這是它的 'scrap value(殘余價(jià)格)' 。
第一個(gè)函數(shù)計(jì)算折舊的年比率(annual rate of depreciation):
<?php if (!$node->nid) node_save($node); $start_date = date_make_date($node->field_purchase_date[0]['value']); $start = $start_date->db->parts; $end_date = date_make_date($node->field_expire_date[0]['value']); $end = $end_date->db->parts; $start_decimal = $start['year'] + ($start['mon'] / 12); // 此給出年折舊 $end_decimal = $end['year'] + ($end['mon'] / 12); // $start_decimal = ($start['year'] * 12) + $start['mon']; // 此給出月折舊 // $end_decimal = ($end['year'] * 12) + $end['mon']; $useful_life = $end_decimal - $start_decimal; $start_value = ($node->field_purchase_value[0]['value']); $end_value = ($node->field_expire_value[0]['value']); $useful_value = ($start_value - $end_value); $node_field[0]['value'] = ($useful_value / $useful_life); ?>
結(jié)果應(yīng)以浮點(diǎn)類型被保存在數(shù)據(jù)庫(kù)中,數(shù)據(jù)長(zhǎng)度為10,2 而且允許 NULL價(jià)格。它僅當(dāng)可編輯節(jié)點(diǎn)字段(node-editable field)改變時(shí)才會(huì)更新(節(jié)點(diǎn)就被重新提交了)。
第二個(gè)函數(shù)是第一個(gè)函數(shù)的衍生(但不依賴第一個(gè)函數(shù))。它根據(jù)相同的線狀折舊計(jì)算(linear depreciation calculation)來(lái)計(jì)算當(dāng)前數(shù)價(jià)格(current value)。
<?php if (!$node->nid) node_save($node); // 讀取日期并設(shè)置為小數(shù)格式 $today = time(); // 讀取當(dāng)前時(shí)間,我們可以代之使用$node->updated... 見(jiàn)后文的注解 $start_date = date_make_date($node->field_purchase_date[0]['value']); $start = $start_date->db->parts; $end_date = date_make_date($node->field_expire_date[0]['value']); $end = $end_date->db->parts; $today_decimal = ($today / 31556952) + 1970.083; // 將unix時(shí)間轉(zhuǎn)換為小數(shù)形式(很粗略,但是用作估算還是不錯(cuò)的 ;) $start_decimal = $start['year'] + ($start['mon'] / 12); // 將iso格式轉(zhuǎn)換為小數(shù)形式 $end_decimal = $end['year'] + ($end['mon'] / 12); $useful_life = $end_decimal - $start_decimal; $used_life = $today_decimal - $start_decimal; // 讀取購(gòu)買價(jià)格和殘余價(jià)格并計(jì)算出折舊價(jià)格 $start_value = ($node->field_purchase_value[0]['value']); $end_value = ($node->field_expire_value[0]['value']); $useful_value = ($start_value - $end_value); // 計(jì)算經(jīng)估算的當(dāng)前價(jià)格并四舍五入 $est_value = round(($useful_value / $useful_life) * $used_life); // 確定估算價(jià)格永不能低于殘余價(jià)格. if ($today_decimal > $end_decimal) { $node_field[0]['value'] = ($end_value . ' (expired)'); } else { $node_field[0]['value'] = ($est_value . ' (estimated)'); } ?>
如果這被保存在了數(shù)據(jù)庫(kù)中,它僅當(dāng)節(jié)點(diǎn)從節(jié)點(diǎn)編輯表中提交時(shí)才會(huì)更新(即根據(jù)當(dāng)前日期重新進(jìn)行計(jì)算)--僅當(dāng)節(jié)點(diǎn)(重新)提交時(shí)。我正探尋讓當(dāng)前價(jià)格可以在Views中被重新計(jì)算。