所以我的日期时间格式为 2021-01-23 20:05:03 CET
或 2021-04-18 23:34:27 CEST
,并希望将其转换回 UTC+0。第一个将是 2021-01-23 19:05:03
,第二个将是 2021-04-18 21:34:27
。
我有一个函数可以将它从 UTC+0 转换为 CEST/CET,但我怎样才能让它变成另一种方式?
功能
function convertTimeZone($strDateTime, $sourceTimeZone, $targetTimeZone){
return date_create($strDateTime, new DateTimeZone($sourceTimeZone))
->setTimeZone(new DateTimeZone($targetTimeZone))
->format('Y-m-d H:i:s T');
}
编辑
所以我尝试实现时间,但没有 CEST/CET,然后使用 date() 函数获取该信息,从而从时间中减去 1 或 2 小时。这会是一个黑客的方式来做到这一点吗?注意:location 设置为 Europe/Copenhagen
,因为它是时间的起点 (CET/CEST)。
function convertCESTorCET($DateTime){
date_default_timezone_set('Europe/Copenhagen');
if (strpos(date('T'), 'CET') !== false) {
$time = date('Y-m-d H:i:s',strtotime($DateTime)-3600);
}
if (strpos(date('T'), 'CEST') !== false) {
$time = date('Y-m-d H:i:s',strtotime($DateTime)-(3600*2));
}
return $time;
}
我看到上述内容不起作用..因为 CET/CEST 不是查看日期本身,而是当前的 CET/CEST。该函数必须查看日期,然后确定它是否应该是 CEST/CET。
做了这个并且有效:
function convertCESTorCET($DateTime){
// Create two timezone objects
$dateTimeZoneUTC0= new DateTimeZone('Atlantic/Reykjavik');
$dateTimeZoneCEST_CET = new DateTimeZone('Europe/Copenhagen');
// Create two DateTime objects that will contain the same Unix timestamp, but
// have different timezones attached to them.
$dateTimeUTC = new DateTime($DateTime, $dateTimeZoneUTC0);
$dateTimeCEST_CET = new DateTime($DateTime, $dateTimeZoneCEST_CET);
// Calculate the GMT offset for the date/time contained in the $dateTimeUTC
// object, but using the timezone rules as defined for Denmark
// ($dateTimeCEST_CET).
$timeOffset = $dateTimeZoneCEST_CET->getOffset($dateTimeUTC);
return date("Y-m-d H:i:s", (strtotime($DateTime)-$timeOffset));
}
答案 0 :(得分:0)
您可以简单地使用时间戳创建一个新日期。
let dated = new Date(yourDateValue);
const finalDateString = dated.toUTCString();
console.log(finalDateString);
这可能会有所帮助。 :)
答案 1 :(得分:0)
因此,此代码采用 UTC0 国家/地区与 CEST/CET 国家/地区之间的差异,并返回从 $DateTime
中减去的这两个国家/地区之间的差异。
function convertCESTorCET($DateTime){
// Create two timezone objects
$dateTimeZoneUTC0= new DateTimeZone('Atlantic/Reykjavik');
$dateTimeZoneCEST_CET = new DateTimeZone('Europe/Copenhagen');
// Create two DateTime objects that will contain the same Unix timestamp, but
// have different timezones attached to them.
$dateTimeUTC = new DateTime($DateTime, $dateTimeZoneUTC0);
$dateTimeCEST_CET = new DateTime($DateTime, $dateTimeZoneCEST_CET);
// Calculate the GMT offset for the date/time contained in the $dateTimeUTC
// object, but using the timezone rules as defined for Denmark
// ($dateTimeCEST_CET).
$timeOffset = $dateTimeZoneCEST_CET->getOffset($dateTimeUTC);
return date("Y-m-d H:i:s", (strtotime($DateTime)-$timeOffset));
}
答案 2 :(得分:0)
PHP 的简单解决方案:创建 DateTime 并将时区设置为 UTC。
示例 1
Console.SetError(Console.Out);
示例 2
$cet = "2021-01-23 20:05:03 CET";
$utcCET = date_create($cet)->setTimeZone(new DateTimeZone('UTC'));
echo $utcCET->format('c');
//2021-01-23T19:05:03+00:00