2012-06-04 24 views
1

我有一個函數Ge​​tAsNumber(日期)在filemaker中。 例如:GetAsNumber(10/10/2008) returns 733325. 我需要編寫函數GetAsNumber與PHP.But與功能mktime()在PHP我不能做到同一個文件。獲取作爲日期編號

回答

1

奇函數,但是這似乎這樣的伎倆:

function getasnumber($date) 
{ 
    $dt_date = new DateTime($date); 
    $dt_start = new DateTime('1/0/0001'); 
    return $dt_date->diff($dt_start)->days; 
} 

var_dump(getasnumber('10/10/2008')); // 733325 
var_dump(getasnumber('10/10/2014')); // 735516 

值顯示,根據您提供的第一次約會是正確的回報,這other documentation

1

該功能似乎被複制同樣的事情FileMaker的GetAsNumber功能:

function GetAsNumber($str) { 
    static $DATE_OFFSET = 719163; // adjust because PHP is from 1980 and Filemaker from 0001 
    static $SECONDS_IN_DAYS = 86400; // get only days from date 

    if (preg_match('/^(\\d{2})[-\\/\\.](\\d{2})[-\\/\\.](\\d{2}|\\d{4})$/', trim($str), $matches)) { 
     $val = intval(strtotime("{$matches[1]}-{$matches[2]}-{$matches[3]}")/$SECONDS_IN_DAYS) + $DATE_OFFSET; 
    } else { 
     $val = floatval(preg_replace('/[^\\d\\.]/', '', $str)); 
    } 

    return $val; 
} 

使用這些值測試:

echo GetAsNumber("FY98") . ' == 98' . PHP_EOL; 
echo GetAsNumber("$1,254.50") . ' == 1254.5' . PHP_EOL; 
echo GetAsNumber("2 + 2") . ' == 22' . PHP_EOL; 
echo GetAsNumber("TKV35FRG6HH84") . ' == 35684' . PHP_EOL; 
echo GetAsNumber("10/10/2014") . ' == 735516' . PHP_EOL; 
echo GetAsNumber("10/10/2008") . ' == 733325' . PHP_EOL; 
+0

你們是更好的。我有一個大腦放屁,出於某種原因只做了日期部分,可能是因爲它與其他部分相比是一個很奇怪的返回值。 –