sql >> データベース >  >> RDS >> Mysql

1970年より前の日付のDateオブジェクトを特定の形式でPHPで作成する

    この機能を試してください。

    編集: まず、2桁の年を4桁に変換します。次に、完全な日付を作成し、それを機能に渡します。

     $original_date = '22-10-49';
        $date_part = explode('-',$original_date);
    
        $baseyear = 1900; // range is 1900-2062
        $shortyear = $date_part[2];
        $year = 100 + $baseyear + ($shortyear - $baseyear) % 100;
        $subdate = substr( $original_date, 0, strrpos( $original_date, '-' ) );
        $string = $subdate."-".$year;
    
        echo safe_strtotime($string);
    
    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
    }
    

    出典:1970年より前の日付にstrtotimeを使用




    1. 接続されているユーザーをOracleデータベースにドロップする

    2. innoDBテーブルのMySQL全文検索の回避策

    3. SQL Serverでのテーブルパーティションの切り替え:ウォークスルー

    4. Mysqldump:挿入するテーブルの名前を変更できますか?