Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中转换(非常)旧的日期?_Php_Mysql_Date_Php 5.2 - Fatal编程技术网

如何在PHP中转换(非常)旧的日期?

如何在PHP中转换(非常)旧的日期?,php,mysql,date,php-5.2,Php,Mysql,Date,Php 5.2,我必须将Access数据库迁移到MySQL。我有两个问题:第一个是年份用两位数字指定;第二,这是一个生日数据库。例如,我有如下字符串: "06/12/76 00:00:00" "10/15/02 00:00:00" 上一年是哪一年(10月15日)?我假设所有年份值超过12的日期都是指19XX,而另一个(从0到12)是指本世纪:20XX 一旦解决了这个问题,我需要格式化这些日期。我试过这个: $bd = strtotime($birth); if ($bd > time()) {

我必须将Access数据库迁移到MySQL。我有两个问题:第一个是年份用两位数字指定;第二,这是一个生日数据库。例如,我有如下字符串:

"06/12/76 00:00:00"
"10/15/02 00:00:00"
上一年是哪一年(10月15日)?我假设所有年份值超过12的日期都是指19XX,而另一个(从0到12)是指本世纪:20XX

一旦解决了这个问题,我需要格式化这些日期。我试过这个:

$bd = strtotime($birth);
if ($bd > time()) {
    $bd = strtotime("-100 years", $bd);
}
$birth = sua_date_unix2mysql($bd);
但问题是strotime只能管理1970年之后的日期。有什么办法解决这个问题吗


注意:Datetime不可用(5.2版)

我不知道它是否合适,但你可以很容易地通过字符串操作来实现这一点

首先将输入字符串解析为值。要解析字符串,可以使用
sscanf

$date = '06/12/76 00:00:00';
$result = sscanf(
    $date, '%d/%d/%d %d:%d:%d', 
    $month, $day, $year, $hour, $minute, $second
);
然后将年份从两个字母扩展到四个字母。这应该是相当简单的,一个简单的
if

$year += $year < 36 ? 2000 : 1900

我不知道它是否合适,但是你可以很容易地通过字符串操作来实现这一点

首先将输入字符串解析为值。要解析字符串,可以使用
sscanf

$date = '06/12/76 00:00:00';
$result = sscanf(
    $date, '%d/%d/%d %d:%d:%d', 
    $month, $day, $year, $hour, $minute, $second
);
然后将年份从两个字母扩展到四个字母。这应该是相当简单的,一个简单的
if

$year += $year < 36 ? 2000 : 1900

只需将这些日期作为字符串进行操作

// "06/12/76 00:00:00"
list($month, $day, $year) = explode('/', $birth);
// $year is actually "76 00:00:00"...
$year = (int)$year;

$century = 2000;
if (($century + $year) > date('Y'))
    $century = 1900;
$year += $century;
$mysql = "$year-$month-$day"; // 19760612 will be recognized by MySQL

只需将这些日期作为字符串进行操作

// "06/12/76 00:00:00"
list($month, $day, $year) = explode('/', $birth);
// $year is actually "76 00:00:00"...
$year = (int)$year;

$century = 2000;
if (($century + $year) > date('Y'))
    $century = 1900;
$year += $century;
$mysql = "$year-$month-$day"; // 19760612 will be recognized by MySQL

升级PHP否则,请享受解决此问题的乐趣;)。这里的大多数日期问题都是因为低质量的问题和答案而变得非常糟糕,所以在搜索网站时不要太快失望。关键字很粗糙,但我很确定有一些宝石可以很好地解释它的工作原理。使用DateTime对象,或者升级到64位版本的PHP来处理完整的日期范围,这应该能满足一般宇宙学家的要求。。。DateTime是一个扩展,即使在PHP5.1.x中也是如此,尽管我建议将您的PHP升级到支持的版本,但为什么不能让MS Access以更易于迁移的格式返回日期?@Gordon因为日期不是存储为“日期”的,所以是简单的字符串:(升级PHP,否则,请享受解决此问题的乐趣;)。这里的大多数日期问题都是因为低质量的问题和答案而变得非常糟糕,所以在搜索网站时不要太快失望。关键字很粗糙,但我很确定有一些宝石可以很好地解释它的工作原理。使用DateTime对象,或者升级到64位版本的PHP来处理完整的日期范围,这应该能满足一般宇宙学家的要求。。。DateTime是一个扩展,即使在PHP 5.1.x中也是如此,尽管我建议将您的PHP升级到受支持的版本,但为什么您不能让MS Access以更易于迁移的格式返回日期?@Gordon因为日期不是存储为“日期”的,所以是简单的字符串:(为什么不正确格式化它?
“$year-$month-$day”
,或
“$year-$month-$day 00:00:00”
。mysql显示日期/日期时间字段的可读性更高,更准确。为什么不只是正确格式化它呢
“$year-$month-$day”
,或
“$year-$month-$day 00:00:00”
。mysql显示日期/日期时间字段的可读性更强,更准确。我已经删除了我的“这看起来像c”的评论就在你回复之前-因为它只是噪音。有时候评论是噪音;)无论如何,谢谢你的反馈,我对答案做了一些改进。一些相关代码如下:对不起,我删除了我的“这看起来像c”“在回复之前发表评论-因为这只是噪音。有时候评论就是噪音;)无论如何,谢谢你的反馈,我把答案改进了一点。以下是一些相关代码: