PHP日期格式 - 我准备打破一些东西

时间:2011-09-20 03:59:41

标签: php date

我有一个标准的“美国”表达日期的方式 - - 06/29/1967或6-29-67

strtotime()create_date()以及date()date_format()所有人都会窒息。

db是MySQl - 将日期存储为yyyy-mm-dd

不幸的是,我无法更改我的架构以将日期存储为纪元时间戳或整数。

5 个答案:

答案 0 :(得分:1)

这会将您的标准日期转换为数据库所需的格式。

date('Y-m-d', strtotime('06/29/1967'));

答案 1 :(得分:0)

我不确定我是否理解您的问题,但您可以使用datemktime函数的组合,例如:

echo date('Y-m-d', mktime(0, 0, 0, month, day, year));

http://php.net/manual/en/function.mktime.php

答案 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 strtotimefull 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');

并将其插入数据库。