Mat*_*lor 56 php mysql date date-format time-format
我正在尝试从我的MySQL数据库中显示一个日期时间作为带有PHP的iso 8601格式化字符串,但它出错了.
2008年10月17日:1969-12-31T18:33:28-06:00显然不正确(年份应该是2008年而不是1969年)
这是我正在使用的代码:
<?= date("c", $post[3]) ?>
Run Code Online (Sandbox Code Playgroud)
$post[3] is the datetime (CURRENT_TIMESTAMP) 来自我的MySQL数据库.
有什么想法会出错吗?
Pao*_*ino 72
第二个参数date是UNIX时间戳,而不是数据库时间戳字符串.
您需要使用strtotime转换数据库时间戳.
<?= date("c", strtotime($post[3])) ?>
Run Code Online (Sandbox Code Playgroud)
Joh*_*nde 30
使用PHP 5.2版中提供的DateTime类,可以这样做:
$datetime = new DateTime('17 Oct 2008');
echo $datetime->format('c');
Run Code Online (Sandbox Code Playgroud)
从PHP 5.4开始,您可以将其作为单行程序执行:
echo (new DateTime('17 Oct 2008'))->format('c');
Run Code Online (Sandbox Code Playgroud)
Joh*_*ers 13
echo date_format(date_create('17 Oct 2008'), 'c');
// Output : 2008-10-17T00:00:00+02:00
Run Code Online (Sandbox Code Playgroud)
$formatteddate = new DateTime('17 Oct 2008');
echo $datetime->format('c');
// Output : 2008-10-17T00:00:00+02:00
Run Code Online (Sandbox Code Playgroud)
echo date_format(new DateTime('17 Oct 2008'), 'c');
// Output : 2008-10-17T00:00:00+02:00
Run Code Online (Sandbox Code Playgroud)
echo date_create('17 Oct 2008')->format('c');
// Output : 2008-10-17T00:00:00+02:00
Run Code Online (Sandbox Code Playgroud)
1)您也可以使用'Y-m-d\TH:i:sP'替代'c'格式.
2)输入的默认时区是服务器的时区.如果您希望输入用于不同的时区,则需要明确设置时区.但这也会影响您的输出:
echo date_format(date_create('17 Oct 2008 +0800'), 'c');
// Output : 2008-10-17T00:00:00+08:00
Run Code Online (Sandbox Code Playgroud)
3)如果您希望输出的时区与输入的时区不同,您可以明确设置您的时区:
echo date_format(date_create('17 Oct 2008')->setTimezone(new DateTimeZone('America/New_York')), 'c');
// Output : 2008-10-16T18:00:00-04:00
Run Code Online (Sandbox Code Playgroud)
对于PHP 5之前:
function iso8601($time=false) {
if(!$time) $time=time();
return date("Y-m-d", $time) . 'T' . date("H:i:s", $time) .'+00:00';
}
Run Code Online (Sandbox Code Playgroud)
这是PHP 5之前的好功能:我最后添加了GMT差异,它不是硬编码的.
function iso8601($time=false) {
if ($time === false) $time = time();
$date = date('Y-m-d\TH:i:sO', $time);
return (substr($date, 0, strlen($date)-2).':'.substr($date, -2));
}
Run Code Online (Sandbox Code Playgroud)
问题多次出现在4 或 8次决赛中的毫秒和最终微秒。要将DATE 转换为 ISO 8601 “date(DATE_ISO8601)”,这些是对我有用的解决方案之一:
// In this form it leaves the date as it is without taking the current date as a reference
$dt = new DateTime();
echo $dt->format('Y-m-d\TH:i:s.').substr($dt->format('u'),0,3).'Z';
// return-> 2020-05-14T13:35:55.191Z
// In this form it takes the reference of the current date
echo date('Y-m-d\TH:i:s'.substr((string)microtime(), 1, 4).'\Z');
return-> 2020-05-14T13:35:55.191Z
// Various examples:
$date_in = '2020-05-25 22:12 03.056';
$dt = new DateTime($date_in);
echo $dt->format('Y-m-d\TH:i:s.').substr($dt->format('u'),0,3).'Z';
// return-> 2020-05-25T22:12:03.056Z
//In this form it takes the reference of the current date
echo date('Y-m-d\TH:i:s'.substr((string)microtime(), 1, 4).'\Z',strtotime($date_in));
// return-> 2020-05-25T14:22:05.188Z
Run Code Online (Sandbox Code Playgroud)