如何将时间从
2010-12-30 23:21:46
转换为 ISO 8601 日期格式? (-_-;)
这是推荐的方式。
$datetime = new DateTime('2010-12-30 23:21:46');
echo $datetime->format(DateTime::ATOM); // Updated ISO8601
对于旧版本的 PHP,或者如果您更喜欢过程代码。
echo date(DATE_ISO8601, strtotime('2010-12-30 23:21:46'));
strtotime('2012-01-18T11:45:00+01:00');
// Output : 1326883500
date_format(date_timestamp_set(new DateTime(), 1326883500), 'c');
// Output : 2012-01-18T11:45:00+01:00
date_format(date_create('@'. 1326883500), 'c') . "\n";
// Output : 2012-01-18T10:45:00+00:00
date_format(date_timestamp_set(new DateTime(), 1326883500)->setTimezone(new DateTimeZone('America/New_York')), 'c');
// Output : 2012-01-18T05:45:00-05:00
如果您尝试在 datetime-local 中设置一个值
date("Y-m-d\TH:i",strtotime('2010-12-30 23:21:46'));
//output : 2010-12-30T23:21
$datetime->format('Y-m-d\TH:i:s.u\Z')
应提供正确的格式,带有“T”分隔符、“Z”时区(确保首先转换为 UTC)和微秒(如果您不打算支持小数秒,则省略 .u
)。
请参阅 https://stackoverflow.com/a/9532375/65387 讨论为什么应该使用
T
ISO 8601 在 PHP 中基本上表示为
"Y-m-d\TH:i:sP"
您可以从常量中获取该值:
DateTime::ATOM
- 适用于 7.2 以下的 PHP 版本(已删除)
DateTimeInterface::ATOM
- 适用于 7.2 以后的 PHP 版本
根据PHP官方文档你可以简单地将其格式化为:
echo $objDateTime->format('c'); // ISO8601 formated datetime
echo $objDateTime->format(DateTime::ISO8601); // Another way to get an ISO8601 formatted string
你可以试试这个方法:
$datetime = new DateTime('2010-12-30 23:21:46');
echo $datetime->format(DATE_ATOM);
您还可以通过模态内部的突变来获得时间戳转换,如下所示
class YourModal extends Model
{
public function getCreatedAtAttribute($date)
{
return date(DATE_ISO8601, strtotime($date)); // ISO 8601 Date Format
}
}
试试这个
public static function toISO8601 (string $datetime) : string {
$datetime = new \DateTime($datetime, new \DateTimeZone('UTC'));
return $datetime->format('Y-m-d\\TH:i:s.vp');
}
输出将为:2010-12-30T04:56:00.000Z