用戶輸入日期爲8/1/11或08/1/11。無論用戶如何在我的文本字段中輸入日期,我想將它們輸入的內容轉換爲我的mm/dd/yyyy格式將用戶輸入轉換爲我的日期格式
因此,如果用戶輸入8/1/11,它會將其轉換爲08/01/2011。
用戶輸入日期爲8/1/11或08/1/11。無論用戶如何在我的文本字段中輸入日期,我想將它們輸入的內容轉換爲我的mm/dd/yyyy格式將用戶輸入轉換爲我的日期格式
因此,如果用戶輸入8/1/11,它會將其轉換爲08/01/2011。
使用strtotime()
將其轉換爲時間值,然後mktime()
將其轉換爲您想要的任何格式。
編輯:原來並不那麼簡單。
你不能只打印您所想,並將其轉移到另一個地方的日期,這將是最好使用某種UI上的客戶端,以確保輸入匹配,一個很好的例子是jQueryUI Datepicker
<?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];
?>
<?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}";
?>
選中此項。 它還檢查日期是否有效(使用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
雖然@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));
?>
聲明:是的,這是做這件事的詳細方式,但是我爲了清晰度而不是效率。
它很容易讓用戶自由輸入**日期字符串**。 。你應該考慮應用一些用戶界面來限制用戶。 JavaScript UI示例 - http://docs.jquery.com/UI/Datepicker(只是一個示例) – ajreal