我有一个使用CodeIgniter构建的应用程序。我在SQL Server数据库中有记录,其中包含日期时间字段。
我在输入m / d / Y文本字段的日期查询这些记录。这对应于db中的日期格式。
不幸的是我在英国!所以我想输入日期,如d / m / Y.所以我需要捕获它,将其格式化为适当的格式然后验证它。
以下是用于格式化的代码:
$datestring = "%m/%d/%Y";
if(isset ($_POST['from_date']) AND isset ($_POST['to_date'])){
$from = mdate($datestring, strtotime($_POST['from_date']));
$to = mdate($datestring, strtotime($_POST['to_date']));
我正在使用CI日期助手中的mdate,但我认为它与date()几乎相同。
如果我输入数据13/12/2010,则发布表单并转储它出现的新日期
string(10) "02/06/2011"
这是怎么发生的?
有人能伸出援助之手吗? :d
比利
答案 0 :(得分:4)
答案是欧洲日期格式使用短划线而不是斜线。
根据manual:
注意:
日期为m / d / y或d-m-y格式 通过观察来消除歧义 各种之间的分隔符 组件:如果分隔符是 斜线(/),然后是美国的m / d / y 假定;而如果分隔符是a 破折号( - )或点(。),然后是 假设欧洲d-m-y格式。
使用正确的格式就像魅力一样:
// American format
//
$_POST['from_date'] = "02/06/2011";
$yankeeTimestamp = strtotime($_POST['from_date']);
// European format
//
$_POST['from_date'] = "06-02-2011";
$euroTimestamp = strtotime($_POST['from_date']);
echo date("m/d/Y", $yankeeTimestamp); // returns 02/06/2011
echo date("m/d/Y", $euroTimestamp); // returns 02/06/2011
答案 1 :(得分:1)
我要做的是用'/'爆炸日期并用mktime创建一个新日期:
$from = explode('/', $_POST['from_date']);
$from = mktime(0, 0, 0, $from[1], $from[0], $from[2]);
$from = mdate($datestring, $from);