Answers:
这是简化的解决方案:
$date = '25/05/2010';
$date = str_replace('/', '-', $date);
echo date('Y-m-d', strtotime($date));
结果:
2010-05-25
该strtotime
文档的内容如下:
在日期米/ d / Y或DMY格式通过查看在各个组件之间的分离器消除歧义:如果隔板是斜线(/),那么美国米/ d / Y假设; 反之,如果分隔符是破折号(-)或点(。),则采用欧洲dmy格式。
echo date('Y-m-l', strtotime('01-01-2010'));
结果为2010-01-Friday
。因此,最后一天取决于您如何为date
函数指定日期格式。
$date = '25/05/2010'; $date = str_replace('/', '-', $date);
不需要额外的行来解决您的问题。
您可以使用DateTime :: createFromFormat从自定义格式(自PHP 5.3起)解析日期。
$timestamp = DateTime::createFromFormat('!d/m/Y', '23/05/2010')->getTimestamp();
(此外:!
用于将未指定的值重置为Unix时间戳,即时间为午夜。)
如果您不想(或不能)使用PHP 5.3,则日期格式手册页上列出了strtotime接受的可用日期/时间格式的完整列表。该网页更彻底地描述了这样的事实m/d/Y
推断过d/m/Y
(但你可以像在答案中提到这里,使用d-m-Y
,d.m.Y
或d\tm\tY
)。
过去,我还求助于str_replace
另一个答案中提到的quicky ,以及将日期字符串自动解析为另一种格式,例如
$subject = '23/05/2010';
$formatted = vsprintf('%3$04d/%2$02d/%1$02d', sscanf($subject,'%02d/%02d/%04d'));
$timestamp = strtotime($formatted);
这是解决许多问题的好方法:
function datetotime ($date, $format = 'YYYY-MM-DD') {
if ($format == 'YYYY-MM-DD') list($year, $month, $day) = explode('-', $date);
if ($format == 'YYYY/MM/DD') list($year, $month, $day) = explode('/', $date);
if ($format == 'YYYY.MM.DD') list($year, $month, $day) = explode('.', $date);
if ($format == 'DD-MM-YYYY') list($day, $month, $year) = explode('-', $date);
if ($format == 'DD/MM/YYYY') list($day, $month, $year) = explode('/', $date);
if ($format == 'DD.MM.YYYY') list($day, $month, $year) = explode('.', $date);
if ($format == 'MM-DD-YYYY') list($month, $day, $year) = explode('-', $date);
if ($format == 'MM/DD/YYYY') list($month, $day, $year) = explode('/', $date);
if ($format == 'MM.DD.YYYY') list($month, $day, $year) = explode('.', $date);
return mktime(0, 0, 0, $month, $day, $year);
}
从STRTOTIME撰写中注意:
通过查看各个组成部分之间的分隔符,可以消除m / d / y或dmy格式的日期的歧义:如果分隔符为斜杠(/),则假定为美国m / d / y;相反,如果分隔符是破折号(-)或点(。),则采用欧洲dmy格式。
它是如此简单。
$t
并$t1
显示不同的结果时。我这样检查。 $t=strtotime(date('d-m-Y'));
和 $t1=strtotime(date('m/d/Y'));
我没有找到更好的解决方案。您可以使用explode()
,preg_match_all()
等等。
我有一个像这样的静态助手功能
class Date {
public static function ausStrToTime($str) {
$dateTokens = explode('/', $str);
return strtotime($dateTokens[1] . '/' . $dateTokens[0] . '/' . $dateTokens[2]);
}
}
可能有一个更好的名称,但我使用ausStrToTime()
它是因为它适用于澳大利亚日期(作为澳大利亚人,我经常处理)。更好的名称可能是标准化名称,但我不确定这是什么。
我试图将ddmmyy格式转换为date("Y-m-d"
format,但是当我直接通过时却无法正常工作ddmmyy =date('dmy')
然后意识到它必须采用yyyy-mm-dd格式。用子串来组织
$strParam = '20'.substr($_GET['date'], 4, 2).'-'.substr($_GET['date'], 2, 2).'-'.substr($_GET['date'], 0, 2);
然后传给 date("Y-m-d",strtotime($strParam));
有效!
$srchDate = date_format(date_create_from_format('d/m/Y', $srchDate), 'Y/m/d');
这将为您工作。您将String转换为自定义日期格式,可以在其中指定PHP所使用的String的原始格式。现在它是一种日期格式,您可以将其转换为PHP的默认日期格式,该格式与MySQL所使用的相同。
如果您知道它是dd / mm / YYYY,则可以执行以下操作:
$regex = '#([/d]{1,2})/([/d]{1,2})/([/d]{2,4})#';
$match = array();
if (preg_match($regex, $date, $match)) {
if (strlen($match[3]) == 2) {
$match[3] = '20' . $match[3];
}
return mktime(0, 0, 0, $match[2], $match[1], $match[3]);
}
return strtotime($date);
它将以d / m / YY或dd / mm / YYYY格式(或两者的任意组合)匹配日期...
如果要支持的分隔符不只是/,可以将正则表达式更改为:
$regex = '#([\d]{1,2})[/-]([\d]{1,2})[/-]([\d]{2,4})#';
然后将所需的任何字符添加[/-]
到位(注意,-字符必须在最后)
\d
十进制数字,而不是[/d]
为正斜或d字符。
最简单的解决方案是这样的:
$date = '07/28/2010';
$newdate = date('Y-m-d', strtotime($date));
就这么简单
date('Y-m-d H:i:s', strtotime( str_replace('/', '-', $from_date ) ) );
str_replace('/', '-', $date);