PHP日期格式和strottime

PHP日期格式和strottime,php,Php,我想从“1959年1月28日”这样的字符串中获取一个Y-m-d格式的日期 我尝试了date(“Y-m-d”,strotime($dateString)),但它返回1970-01-01 奇怪的是,如果我用“1959年1月28日”常量调试上述代码,它会工作,但如果我用存储相同值的变量替换字符串,它会返回1970-01-01 有什么想法吗?出现这种情况的原因似乎是因为您的系统无法处理负时间戳。由strotime创建的unix时间戳将1970-01-01 00:00:00作为零点。在此之前的任何日期都是

我想从“1959年1月28日”这样的字符串中获取一个
Y-m-d
格式的日期

我尝试了
date(“Y-m-d”,strotime($dateString))
,但它返回1970-01-01

奇怪的是,如果我用“1959年1月28日”常量调试上述代码,它会工作,但如果我用存储相同值的变量替换字符串,它会返回1970-01-01


有什么想法吗?

出现这种情况的原因似乎是因为您的系统无法处理负时间戳。由strotime创建的unix时间戳将1970-01-01 00:00:00作为零点。在此之前的任何日期都是负数,之后的任何日期都是正数。我认为由于某种原因,您的系统无法将负数解释为时间戳

我不确定这是否有帮助,但PHP网站有


我很好奇这会输出什么:
date('Y-m-d',-1)
,应该是1969-12-31。

解决方案是从日期字符串中删除特殊字符:

date("Y-m-d", strtotime(preg_replace('/[^A-Za-z0-9\-]/', '', $dateString)))

你的代码运行良好!!。你从哪里得到你的字符串日期?从外部网络api()你会发布你从这个api得到的日期格式吗?我在问题中写的示例(“1959年1月28日”)来自api。日期('Y-m-d',-1)输出1969-12-31和
strotime('1959年1月28日')
outputs'-344822400')和
date('Y-m-d',-344822400)
?还有日期('Y-m-d',标准时间('1969年1月28日')?有什么特殊的角色你看不见吗?这是我能想到的最后一个解决方案,因为它在任何地方都能正常工作。是的,日期字符串中有特殊字符。这就是问题所在(如上面所示)。谢谢你的帮助。