如何按此顺序构建日期 此脚本的月日和年



我有一个脚本,可以将日期和时间从目标时区转换为另一个时区。一切都很好,但我发现dateTime()结构非常烦人,把年份放在第一位,然后是月份,最后一天。

例如:

<?php
$date = new DateTime('2011-6-30 4:52pm', new DateTimeZone('America/Phoenix'));
$date->setTimezone(new DateTimeZone('Asia/Baghdad'));
echo $date->format('n-j-Y g:i A');
?>

我想知道是否有其他方法可以用来像这样构建日期:

<?php
$date = new DateTime('6-30-2011 4:52pm', new DateTimeZone('America/Phoenix'));
$date->setTimezone(new DateTimeZone('Asia/Baghdad'));
echo $date->format('n-j-Y g:i A');
?>

第一个月,第二天,最后一个年。我是否必须使用其他方法来创建这样的结构?或者,如果我不必更改我的方法,那么我该如何调整代码以使其按该顺序工作?

我试图将其更改为我想要的顺序,但它导致了此错误:

致命错误:未捕获的异常:日期时间::__construct():无法在位置 0 (6) 解析时间字符串 (6-30-2011 4:52pm) (6):C:\xampp\htdocs\xxx.php:3 堆栈跟踪中的意外字符:#0 C:\xampp\htdocs\xxx.php(3

): DateTime->__construct('6-30-2011 4:52p...', 对象(日期时区)) #1 {main} 在第 3 行抛出 C:\xampp\htdocs\xxx.php

它默认采用该格式的原因是,像"3-5-2019"这样的日期会模棱两可:是 3 月 5 日还是 5 月 3 日?

尽管如此,您正在寻找的是createFromFormat()

$date = DateTime::createFromFormat('m-d-Y h:ia', '6-30-2011 4:52pm',new DateTimeZone( 'America/Phoenix'));
$date->setTimezone(new DateTimeZone('Asia/Baghdad'));
echo $date->format('n-j-Y g:i A');

对于所有这些工作,我肯定会把它放在一个函数中:

function convertCSTtoAST(String $cst) 
{
$date = DateTime::createFromFormat('m-d-Y h:ia', $cst, new DateTimeZone( 'America/Phoenix'));
$date->setTimezone(new DateTimeZone('Asia/Baghdad'));
return $date->format('n-j-Y g:i A');
}

错误处理留给您:)

你总是可以编写自己的函数(或类):

<?php
$date = dateTime(6, 30, 2011, '4:52pm', 'America/Phoenix');
$date->setTimezone(new DateTimeZone('Asia/Baghdad'));
echo $date->format('n-j-Y g:i A');

function dateTime($mon, $day, $year, $time, $zone){
return new DateTime("$year-$mon-$day $time", new DateTimeZone($zone));
}
?>

最新更新