2011-08-31 72 views
2

用戶輸入日期爲8/1/11或08/1/11。無論用戶如何在我的文本字段中輸入日期,我想將它們輸入的內容轉換爲我的mm/dd/yyyy格式將用戶輸入轉換爲我的日期格式

因此,如果用戶輸入8/1/11,它會將其轉換爲08/01/2011。

+2

它很容易讓用戶自由輸入**日期字符串**。 。你應該考慮應用一些用戶界面來限制用戶。 JavaScript UI示例 - http://docs.jquery.com/UI/Datepicker(只是一個示例) – ajreal

回答

2

使用strtotime()將其轉換爲時間值,然後mktime()將其轉換爲您想要的任何格式。

編輯:原來並不那麼簡單。

你不能只打印您所想,並將其轉移到另一個地方的日期,這將是最好使用某種UI上的客戶端,以確保輸入匹配,一個很好的例子是jQueryUI Datepicker

1
<?php 

$userInput = '08/1/11'; // or = '8/1/11' or = '08/01/11' or = '01/8/11' 

$arr = explode('/', $userInput); 

$formatted = sprintf("%1$02d", $arr[0]) . '/' . sprintf("%1$02d", $arr[1]) . '/20' . $arr[2]; 

?> 
0
<?php 
preg_match('#^(0?[1-9]|1[0-2])/(0?[1-9]|[12][0-9]|3[01])/(\d{2})$#',trim($date),$matches); 
$month=str_pad($matches[1],2,'0',STR_PAD_LEFT); 
$day=str_pad($matches[2],2,'0',STR_PAD_LEFT); 
$year=$matches[3]; 

$result="{$month}/{$day}/{$year}"; 
?> 
1

選中此項。 它還檢查日期是否有效(使用checkdate)並將年份由短到長轉換。短期使用時,0-69轉換爲2000-2069,70-99轉換爲1970-1999。

<?php 
function cleanDate($input) 
{ 
    $parts = explode('/', $input); 
    if(count($parts) != 3) return false; 

    $month = (int)$parts[0]; 
    $day = (int)$parts[1]; 
    $year = (int)$parts[2]; 

    if($year < 100) 
    { 
     if($year < 70) 
     { 
      $year += 2000; 
     } 
     else 
     { 
      $year += 1900; 
     } 
    } 

    if(!checkdate($month, $day, $year)) return false; 

    return sprintf('%02d/%02d/%d', $month, $day, $year); 
    // OR 
    $time = mktime(0, 0, 0, $month, $day, $year); 
    return date('m/d/Y', $time); 
} 

$test = array(
    '08/01/2011', '8/1/11', '08/01/11', // Should all return 08/01/2011 
    '08/1/87', // Should return 08/01/1987 
    '32/1/93', '13', // Should fail: invalid dates 
    '02/29/2011', // Should fail: 2011 is not a leap year 
    '2/29/08'); // Should return 02/29/2008 (2008 is a leap year) 
foreach($test as $t) 
{ 
    echo $t.' : '.(cleanDate($t) ?: 'false')."\n"; 
} 
?> 

Result: 
08/01/2011 : 08/01/2011 
8/1/11 : 08/01/2011 
08/01/11 : 08/01/2011 
08/1/87 : 08/01/1987 
32/1/93 : false 
13 : false 
02/29/2011 : false 
2/29/08 : 02/29/2008 
0

雖然@Truth是正確的,用戶可以做很多事情,讓人很難,實際上有一種方法做分析的日期輸入框工作的一個相當體面的工作。它考慮到可能出現的各種用戶輸入問題。

注意,它確實使兩個假設:

本地使用M/d/Y
的日期格式。如果今年是短期形式進入,我們面對的是一個2000+一年

<?php 
    // Trim spaces from beginning/end 
    $date = trim(request($field)); 
    // Allow for the user to have separated by spaces 
    $date = str_replace(" ", "/", $date); 
    // Allow for the user to have separated by dashes or periods 
    $date = str_replace("-", "/", str_replace(".", "/", trim($date))); 
    // Explode the date parts out to ensure a year 
    // Granted, this is geo-centric - you could adjust based on your locale 
    $dateparts = explode("/", $date); 
    // Check for a year. If not entered, assume this year 
    if (!isset($dateparts[2])) {$dateparts[2] = date("Y");} 
    // Force year to integer for comparison 
    $dateparts[2] = (int)$dateparts[2]; 
    // Allow for user to use short year. Assumes all dates will be in the year 2000+ 
    if ($dateparts[2] < 2000) {$dateparts[2]+= 2000;} 
    // Re-assemble the date to a string 
    $date = implode("/", $dateparts);  
    // Utilize strtotime and date to convert date to standard format 
    $date = date("m/d/Y", strtotime($date)); 
?> 

聲明:是的,這是做這件事的詳細方式,但是我爲了清晰度而不是效率。