森林之原
五月 22, 2012, 10:39:16 am *
歡迎光臨, 訪客. 請先 登入註冊一個帳號.

請輸入帳號, 密碼以及預計登入時間
新聞: 官方釋出 SMF 2.0 beta。繁體中文已經完成。請到 SMF 的版面下載測試。如有問題請通知。
 
   首頁   說明 搜尋 日曆 登入 註冊  
頁: [1]   向下
  寄送主題  |  列印  
作者 主題: [修改][討論]通用性的日期格式  (閱讀 3540 次)
0 會員 以及 2 訪客 正在閱讀本篇主題.
seethrou
訪客
« 於: 十月 28, 2005, 01:36:12 am »

通用性的日期格式,在日期輸入時比較靈活,相信會對使用中文的朋友特別有幫助,
如果有興趣的朋友,請參考,希望大家一同研究。

官網的討論和發表
International Date Formats, was: function zen_date_raw()
http://www.zen-cart.com/modules/ipb/index.php?showtopic=16365&st=0





[附件已被管理員刪除]
« 最後編輯時間: 十月 28, 2005, 01:38:46 am 由 seethrou » 向版主檢舉   已記錄
Owl
初學者
*
離線 離線

文章: 46


« 回覆文章 #1 於: 十一月 01, 2005, 02:36:40 am »

看了官網對 zen_date_raw() 的討論,覺得太過頭了,太活了,反而令人不知所措,網頁旁邊給一個例子,就會讓使用者覺得清楚簡單。所以提供一個簡單一點的建議。

對於檢測使用者輸入的日期:

1. 連在一起的數字,只能當一個數目,也就是,不從連在一起的數字,分離出年,月或日。

2. 日期數字間可以有不同的 分界 如:'12.01.1980','12/01/80', '12  1   1980', '12abd1/1980'

3. 覺得沒有必要接受英文縮寫月名,但為通用起見,加入為 option。如:'jan10/1980' '10jan75'


對於日期格式的定義:
沿用 zencart 的方法,因為其他地方也用 DATE_FORMAT, 但我們也接受 如:'d/m-y', 'dd/mm/yyyy', 'yyyy/mm/dd', 'yy.dd.mmm'。

還有,日期欄的最小長度,改為 6 ,才能適合以上所談的方法。

不知是否可用? 至少輸入時活一點。

修改 chinese_tc_utf-8.php 裏的 zen_date_raw()
程式碼:
function zen_date_raw($date, $reverse = false) {

$cnt = preg_match_all ( "/y+|d+|m+/",strtolower(DATE_FORMAT),$regs);
if ($cnt == 3) $dformat = $regs[0]; else return false;

//---Decommenting these lines to accept name of the months in English ------------
//$search = array ('/jan/', '/feb/', '/mar/', '/apr/', '/may/', '/jun/', '/jul/', '/aug/', '/sep/', '/oct/', '/nov/', '/dec/');
//$replace = array ('.01.','.02.','.03.','.04.','.05.','.06.','.07.','.08.','.09.','.10.','.11.','.12.');
//$date = preg_replace($search, $replace, strtolower($date));
//-----------------------------------------------------------------

$cnt = preg_match_all ( "/\d+/",$date,$regs);
if ($cnt == 3) $dvalue = $regs[0]; else return false;

$yc = $mc = $dc = 0;
for ($i = 0; $i < 3; $i++) {
switch(substr($dformat[$i],0,1)) {
case ("y"):
if ($yc == 0) $yc = 1; else return false;
$y = $dvalue[$i];
if (strlen($y) < 2) { $y = '0' . $y; }
if (strlen($y)=="2") {
if ($y <= date("y"))
$y = "20" . $y;
else
$y= "19" . $y;
}
break;
case ("d"):
if ($dc == 0) $dc = 1; else return false;
$d = $dvalue[$i];
if (strlen($d) < 2) { $d = '0' . $d; }
break;
case ("m"):
if ($mc == 0) $mc = 1; else return false;
$m = $dvalue[$i];
if (strlen($m) < 2) { $m = '0' . $m; }
break;
}
}
if ($reverse) { $date= $d . $m . $y; } else { $date= $y . $m . $d; }
return $date;
}
« 最後編輯時間: 十一月 01, 2005, 11:05:53 am 由 Owl » 向版主檢舉   已記錄
seethrou
訪客
« 回覆文章 #2 於: 十一月 01, 2005, 04:43:25 am »

謝謝您的努力!
稍後抽時間來試驗。

官網上的項目,之前也觀察了一陣子,也覺得兼顧太多了。

向版主檢舉   已記錄
頁: [1]   向上
  寄送主題  |  列印  
 
前往:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Valid XHTML 1.0! Valid CSS!