如何编写单个函数来获取PHP中的不同时区?

时间:2011-03-29 05:58:49

标签: php date time

我正在创建一个脚本,允许用户选择自己的时区...... 并输入日期$ time ..因此,用户输入的日期/时间必须转换为GMT格式,同时存储到数据库中。 从数据库中检索时,应该再次转换为原始格式。 这里也必须包括DST概念。

所以这里的日期可以是一个变量,可以是一个字符串或数组(也是多维数组) 所以我试着这样......

function ConvertOneTimezoneToAnotherTimezone($time,$currentTimezone,$timezoneRequired)
{

    $current_zone = new DateTimeZone($currentTimezone);
    //$gmt = new DateTimeZone('GMT');

    $date = new DateTime($time, $current_zone);
    //$date->setTimezone($gmt);
    $date->setTimezone(new DateTimeZone($timezoneRequired));

    return  $date->format('Y-m-d H:i:s');

 // Convert it back to Original timezone
     $date->setTimezone($current_zone);
     return  $date->format('Y-m-d H:i:s');
 }

 $time='2011-03-29 11:15:00.000';

 echo  "Current Date/Time is=".ConvertOneTimezoneToAnotherTimezone($time,'Asia/Kolkata','America/New_York');

但在这里我只能转换成不同的时区,但我想要一个转换日期/时间的功能,同时检索时会给出原始格式...... 请有人帮帮我......

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

<?php

function ConvertOneTimezoneToAnotherTimezone($originalDateTime, $originalTimeZone, $targetTimeZone) {
    $format   = 'Y-m-d H:i:s';

    $dateTime = new DateTime($originalDateTime, new DateTimeZone($originalTimeZone));
    $original = $dateTime->format($format);

    $dateTime->setTimezone(new DateTimeZone($targetTimeZone));
    $target   = $dateTime->format($format);

    return compact('original', 'target');
}

$dateTime  = '2011-03-29 11:15:00.000';
$converted = ConvertOneTimezoneToAnotherTimezone($dateTime,'Asia/Kolkata','America/New_York');

echo sprintf('Original  Date/Time is=%s', $converted['original']), PHP_EOL;
echo sprintf('Converted Date/Time is=%s', $converted['target']), PHP_EOL;