我有一个标准的“美国”表达日期的方式 - - 06/29/1967或6-29-67
strtotime()
和create_date()
以及date()
或date_format()
所有人都会窒息。
db是MySQl - 将日期存储为yyyy-mm-dd
。
不幸的是,我无法更改我的架构以将日期存储为纪元时间戳或整数。
答案 0 :(得分:1)
这会将您的标准日期转换为数据库所需的格式。
date('Y-m-d', strtotime('06/29/1967'));
答案 1 :(得分:0)
我不确定我是否理解您的问题,但您可以使用date
和mktime
函数的组合,例如:
echo date('Y-m-d', mktime(0, 0, 0, month, day, year));
答案 2 :(得分:0)
这就是我在PHP / MySQL设置中所做的事情:
创建日期对象:
$date = new DateTime(null, new DateTimeZone("UTC"));
在DB中保存日期:
$dateString = $date->format("Y-m-d H:i:s");
从DB中检索日期:
$ retrievalDateString =
$retrievedDate = new DateTime($retrievedDateString, new DateTimeZone("UTC"))
答案 3 :(得分:0)
实际上@Ramy Deeb回复了我要做的事情,strtotime几乎可以转换成UNIX时间戳,而日期只会让你满足需要。
要查看strtotime可以处理的内容,您可以查看the date formats for strtotime或full documentation for acceptable formats
答案 4 :(得分:0)
您可以使用date_create_from_format
进行如下操作:
$myDate = date_create_from_format('m/d/Y', '06/29/1967');
对于2位数格式,以下格式为
$myDate2 = date_create_from_format('n-d-y', '6-29-67');
注意:上述日期被解释为 2067年6月29日 不 1967年6月29日因为哦PHP的解释2位数年份。我已经测试过,PHP会从以下几年开始:
70 - 99 => 1970 - 1999
00 - 69 => 2000 - 2069
因此我建议使用四位数年份格式 但是如果你不能改变数据源,那么对于像你这样的69年是1969年的日期,我会按照我自己的条件转换年份,如下所示:
// if the date is wrongly interpreted as 2000+, change it to 1900 one
// here I have choosen range '38 - 99' as '1938 - 1999'
if(date_format($myDate2, 'Y') > 2038)
date_sub($myDate2, date_interval_create_from_date_string('100 years'));
使用$myDate
date_format
对象后
$db_date_str = date_format($myDate, 'Y-m-d');
并将其插入数据库。