将用户输入转换为我的日期格式

时间:2011-08-31 13:35:58

标签: php date textbox

用户输入日期为8/1/11或08/1/11。无论用户如何在我的文本字段中输入日期,我想将他们输入的内容转换为我的格式mm / dd / yyyy

因此,如果用户输入8/1/11,则会将其转换为08/01/2011。

5 个答案:

答案 0 :(得分:2)

使用strtotime()将其转换为时间值,然后mktime()将其转换为您想要的任何格式。

编辑:事实证明并非如此简单。

你不能只打印任何你喜欢的日期并将其转移到另一个日期,最好在客户端使用某种UI以确保输入匹配,一个很好的例子是{{3} }

答案 1 :(得分: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];

?>

答案 2 :(得分: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

答案 3 :(得分: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}";
?>

答案 4 :(得分: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));
?>

免责声明:是的,这是执行此操作的详细方法,但我这样做是为了清晰显示示例,而不是效率。