Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将CEST/CET转换为UTC+;0_Javascript_Php_Html - Fatal编程技术网

Javascript 将CEST/CET转换为UTC+;0

Javascript 将CEST/CET转换为UTC+;0,javascript,php,html,Javascript,Php,Html,因此,我的日期时间格式为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的函数,但是我怎么能用另一种方式呢 功能 函数convertTimeZone($strDateTime、$sourceTimeZone、$targetTimeZone){ 返回日期\u创建($strDateTim

因此,我的日期时间格式为
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的函数,但是我怎么能用另一种方式呢

功能

函数convertTimeZone($strDateTime、$sourceTimeZone、$targetTimeZone){
返回日期\u创建($strDateTime,newDateTimeZone($sourceTimeZone))
->setTimeZone(新日期时区($targetTimeZone))
->格式(“Y-m-DH:i:ST”);
}
编辑

因此,我尝试在没有CEST/CET的情况下实现时间,然后使用date()函数获取信息,从而从时间中减去1或2个小时。这是一种黑客的方式吗?注意:位置设置为
欧洲/哥本哈根
,因为它是时间的起点(CET/CEST)

函数转换存储($DateTime){
日期默认时区设置(“欧洲/哥本哈根”);
if(strpos(日期('T'),'CET')!==false){
$time=date('Y-m-d H:i:s',strottime($DateTime)-3600);
}
if(strpos(日期('T'),'CEST')!==false){
$time=date('Y-m-dh:i:s',strottime($DateTime)-(3600*2));
}
返回$time;
}
我明白了,上面的方法行不通。。因为CET/CEST不是看日期本身,而是看当前的CET/CEST。函数必须查看日期,这样才能确定日期是否应为CEST/CET

制作了这个,它可以工作:

函数转换存储($DateTime){
//创建两个时区对象
$dateTimeZoneUTC0=新的日期时区(“大西洋/雷克雅未克”);
$dateTimeZoneCEST_CET=新的日期时区(“欧洲/哥本哈根”);
//创建两个DateTime对象,它们将包含相同的Unix时间戳,但
//有不同的时区连接到它们。
$dateTimeUTC=新日期时间($DateTime,$dateTimeZoneUTC0);
$dateTimeCEST_CET=新日期时间($DateTime$dateTimeZoneCEST_CET);
//计算$dateTimeUTC中包含的日期/时间的GMT偏移量
//对象,但使用为丹麦定义的时区规则
//($dateTimeCEST_CET)。
$timeOffset=$DateTimeZoneTest\u CET->getOffset($dateTimeUTC);
返回日期(“Y-m-d H:i:s”,(strotime($DateTime)-$timeOffset));
}

您只需使用时间戳创建一个新日期即可

let dated = new Date(yourDateValue);
const finalDateString = dated.toUTCString();
console.log(finalDateString);

这可能会有帮助。:)

因此,此代码获取UTC0国家和CEST/CET国家之间的差异,并返回从
$DateTime
中减去的这两个国家之间的差异

函数转换存储($DateTime){
//创建两个时区对象
$dateTimeZoneUTC0=新的日期时区(“大西洋/雷克雅未克”);
$dateTimeZoneCEST_CET=新的日期时区(“欧洲/哥本哈根”);
//创建两个DateTime对象,它们将包含相同的Unix时间戳,但
//有不同的时区连接到它们。
$dateTimeUTC=新日期时间($DateTime,$dateTimeZoneUTC0);
$dateTimeCEST_CET=新日期时间($DateTime$dateTimeZoneCEST_CET);
//计算$dateTimeUTC中包含的日期/时间的GMT偏移量
//对象,但使用为丹麦定义的时区规则
//($dateTimeCEST_CET)。
$timeOffset=$DateTimeZoneTest\u CET->getOffset($dateTimeUTC);
返回日期(“Y-m-d H:i:s”,(strotime($DateTime)-$timeOffset));
}

PHP的简单解决方案:创建日期时间并将时区设置为UTC

示例1

$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
示例2

$cest = "2021-04-18 23:34:27 CEST"; 

$utcCEST = date_create($cest)->setTimeZone(new DateTimeZone('UTC'));

echo $utcCEST->format('c');
//2021-04-18T21:34:27+00:00

试着做一个这样的函数,这是一个足够好的方法吗?我在我的新函数中发现了一个错误(做了一个编辑)创建了一个新代码,这很好。。