将 CEST/CET 转换为 UTC+0

时间:2021-04-28 06:55:54

标签: javascript php html

所以我的日期时间格式为 2021-01-23 20:05:03 CET2021-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));
}

3 个答案:

答案 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
相关问题