Php 解析日期字符串
我在post变量中有这个字符串Php 解析日期字符串,php,mysql,string,parsing,datetime,Php,Mysql,String,Parsing,Datetime,我在post变量中有这个字符串 '03/21/2011' 我需要通过php解析它,并将其转换为这种格式 '2011-03-21' 我正在使用php,我需要这种格式,这样我就可以运行这个查询 SELECT prospect as 'Prospect', company as 'Company', industry as 'Industry', created_at as 'Original Date Submitted', software as 'Software', warm_transf
'03/21/2011'
我需要通过php解析它,并将其转换为这种格式
'2011-03-21'
我正在使用php,我需要这种格式,这样我就可以运行这个查询
SELECT prospect as 'Prospect', company as 'Company', industry as 'Industry', created_at as 'Original Date Submitted', software as 'Software', warm_transfer as 'Warm Transfer', UserName as 'Sales Rep' FROM mercury_leads join user on UserID=user_id WHERE created_at BETWEEN '2011-01-01' AND '2011-03-22'
如果您想在PHP中处理它,最好的方法是使用函数,该函数将字符串转换为时间,然后可以使用该函数进行操作 所以你会做一些类似的事情:
$dateStr = date('Y-m-d', strtotime('03/21/2011'));
使用strotime()
的好处在于,您不必担心传入的字符串的确切格式。只要它是半合理的,它就会转换它
因此,它将处理2011年3月21日,2011年3月21日,03-21-11,而无需任何修改或特殊情况。您甚至可以从mysql解析它
$items=explode('/','03/21/2011');
$time=mktime(0,0,0,$items[0],$items[1],$items[2]);
$isodate=date('Y-m-d',$time);
select str_to_date('03/21/2011','%m/%d/%Y')
STR_TO_DATE(创建于,'%m/%d/%Y')作为“原始提交日期”
$date = '03/21/2011';
$timestamp = strtotime($date);
$sqlDate = date('Y-m-d', $timestamp);
这应该能满足你的需要
虽然有很多方法可以做到这一点,但我认为最容易理解并适用于所有日期转换的方法是:
$date = date_create_from_format('n/d/Y', $date)->format('Y-n-d');
它是明确的,您永远不必怀疑m/d或d/m等。您可以在这里看到它
或者使用PHP 5.3的日期类回答1:
你可以用这样的东西
$dateStr = date('Y-m-d', strtotime($someDate));
骗局
这对代码的可读性不是很好,因为它不允许您显式地解析某个格式并在代码中显示出来。例如,对于外部程序员来说,您的代码对于$someDate的格式并不明显,因为strotime解析多种格式
专业的
但是,如果$someDate可能会更改,并且您希望代码继续尝试规范化各种格式,那么这是一个很好的选择
骗局
如果需要,则数据的格式不受支持。例如,当试图解析非美国日期格式的日期时,意味着月份和日期被切换,但格式使用正斜杠(21/04/78),通过查看各个组件之间的分隔符,可以消除m/d/y或d-m-y格式中日期的歧义:如果分隔符是斜杠(/),则假定为美国m/d/y;而如果分隔符是破折号(-)或点(.),则假定为欧洲d-m-y格式
答复2:
为了让您的代码清楚地知道解析的日期,并验证输入的数据是否使用了正确的格式,我将使用date\u create\u from\u格式。以下是一些帮助代码:
$server_date_str='06-10-2013 16:00:09';
$server_date_time = DateTime::createFromFormat('d-m-Y H:i:s',$server_date_str);
// check the format
if ( !($server_date_time instanceof DateTime) ) {
$error_array = DateTime::getLastErrors();
throw new Exception( implode(" - ",$error_array['errors']) );
}
//convert DateTime object to Unix time stamp
$server_time = strtotime($server_date_time->format('d-m-Y H:i:s'));
//convert Unix timestamp to date string of the format 2012-10-21
$dateStr = date('Y-m-d', $server_time);
此链接将更详细地解释此示例:
可能重复的,您可以找到一对解决此问题的解决方案。但是,请注意,它无法解析d/m/Y,这是一种非常合理的格式。从strotime文档来看,它似乎假设m/d/Y if/用作分隔符,而d-m-Y if-or。用作分隔符。听起来不错。当然,这意味着它实际上无法解析
3-21-2011
。这就是为什么我更喜欢date\u create\u from\u format
(因为如果您要求它解析这样一种格式,它可以解析),但显然,当d时,没有任何东西可以捕捉(例如)意外的d-m-Y