note 107354 modified in function.strtotime by danbrown

From: Date: Thu, 10 May 2012 21:22:58 +0000
Subject: note 107354 modified in function.strtotime by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-187881@lists.php.net to get a copy of this message
this function allow the use of native strtotime with dates before 1970 (and before 1900) even in Windows

<?php
function safe_strtotime($string)
{
	if(!preg_match("/\\d{4}/", $string, $match)) return null; //year must be in YYYY form
	$year = intval($match[0]);//converting the year to integer
	if($year >= 1970) return date("Y-m-d", strtotime($string));//the year is after 1970 - no problems even for Windows
	if(stristr(PHP_OS, "WIN") && !stristr(PHP_OS, "DARWIN")) //OS seems to be Windows, not Unix nor Mac
	{
		$diff = 1975 - $year;//calculating the difference between 1975 and the year
		$new_year = $year + $diff;//year + diff = new_year will be for sure > 1970
		$new_date = date("Y-m-d", strtotime(str_replace($year, $new_year, $string)));//replacing the year with the new_year, try strtotime, rendering the date
		return str_replace($new_year, $year, $new_date);//returning the date with the correct year
	}
	return date("Y-m-d", strtotime($string));//do normal strtotime
}
?> --was-- //this function allow the use of native strtotime with dates before 1970 (and before 1900) even in Windows function safe_strtotime($string) { if(!preg_match("/\d{4}/", $string, $match)) return null; //year must be in YYYY form $year = intval($match[0]);//converting the year to integer if($year >= 1970) return date("Y-m-d", strtotime($string));//the year is after 1970 - no problems even for Windows if(stristr(PHP_OS, "WIN") && !stristr(PHP_OS, "DARWIN")) //OS seems to be Windows, not Unix nor Mac { $diff = 1975 - $year;//calculating the difference between 1975 and the year $new_year = $year + $diff;//year + diff = new_year will be for sure > 1970 $new_date = date("Y-m-d", strtotime(str_replace($year, $new_year, $string)));//replacing the year with the new_year, try strtotime, rendering the date return str_replace($new_year, $year, $new_date);//returning the date with the correct year } return date("Y-m-d", strtotime($string));//do normal strtotime } http://php.net/manual/en/function.strtotime.php

« previous php.notes (#187881) next »