使用正则表达式进行日期操作


Date manipulation with regex

我需要将以下格式20:35:20 Feb 24, 2012 PST更改为Feb 23, 2013。我需要它是通用的,因为它可能会在未来的很多年里使用。

此处不需要Regex。您可以简单地使用date()和strtotime()。

$input = "20:35:20 Feb 24, 2012";
// Convert to timestamp, add a year, subtract a day
echo date("M j, Y", strtotime($input . " + 1 Year - 1 Day"));
// Outputs: Feb 23, 2013

'd{2}:'d{2}'d{2}'s+([A-Z]+'s+'d{1,2}'s+'d{4})'s+[A-Z]+

日期将在第一组中。如果希望regex与整个字符串匹配(而不是与字符串中间的日期匹配),请将^放在开头,将$放在结尾。此正则表达式用于不区分大小写的匹配。

如果示例日期/时间的任何部分是可选的,请告诉我,我可以修改它。

请参阅实际示例:http://codepad.org/xDCbKZxV

function isLeapYear($year)
{
  return ((($year % 4) == 0) && (($year % 100) != 0) || (($year % 400) == 0));
}
$date = strtotime('20:35:20 Feb 24, 2012 PST');
if ( isLeapYear(date('Y', $date)) )
  $date += (60*60*24*366);  // One year (leap year!)
else
  $date += (60*60*24*365); // One year