Rumah php教程 php手册 如何使用PHP和PEAR进行不同时区的转换

如何使用PHP和PEAR进行不同时区的转换

Jun 21, 2016 am 09:00 AM
date nbsp php

    PHP具备一系列日期和时间函数,这为您获取时间信息提供了便利,您可以将这些信息转换为需要的格式并用于计算或者展示给用户。但是如果您想实现一些复杂的功能,事情可能会变得非常复杂。

    一个简单的例子是在网页上显示时间。在PHP中,您可以简单地使用data()函数读取服务器的时钟并以指定的格式进行显示;但是如果您所要显示的时间是不同时区的,比如,您的公司和服务器位于不同的国家,您需要看到的是本地时间而不是当地时间。

    因此,您需要计算出两地的时差,并进行一些计算从而在不同的时区中进行调整,如果时差很重要,您还需要考虑到日期变更、夏令时、月底的最后一天以及闰年的限制等等。

    正如您想像的一样,如果您手动完成这些时区的数学计算,那么这很快就会变成一件很复杂的事情。幸好,PHP内建的时区函数可以帮助解决这一问题,但这些函数并不直观,需要一些时间来熟悉它们的使用。当然,更加快捷的一个选择是使用PEAR的Date类库,它具备对时区的内建支持,而且到目前为止,这是进行时区转换的最简便的方法。

    这篇指南将向您讲解如何使用PEAR的Date类在不同的时区中进行不同的时间数值转换。我假定您已经安装了Apache、PHP以及PEAR的Date类库并且它们都能正常工作。

    注意:您可以直接从互联网上安装PEAR的Date类库,您可以下载或使用它提供的指南进行安装。

开始

    让我们从基础的初始化和使用Date对象开始讲解,请创建列表A中的PHP代码:

// include class
include ("Date.php");

// initialize object
$d = new Date("2006-06-21 15:45:27");

// retrieve date
echo $d->getDate();
?>

    这个例子非常简单,它所包含的类代码使用一个日期/时间字符串初始化了一个Date()对象,然后使用getDate()方法来展示您插入的数值,以下是输出的结果:

    2006-06-21 15:45:27

    如何以不同格式来显示日期呢?如果是一个标准格式,比如ISO格式,那只需要向getDate()传递一个修饰符来指明即可,代码如列表B所示:

// include class
include ("Date.php");

// initialize object
$d = new Date("2006-06-21 15:45:27");

// retrieve date as timestamp
echo $d->getDate(DATE_FORMAT_ISO_BASIC);
?>

    这个例子的输出符合标准的ISO格式。

    20060621T154527Z

    如果需要自己定制的格式,您可以使用format()方法来实现这一点,它和PHP的原有的date()函数一样,format()方法可以接收一系列格式定义符来指明日期每个部分的具体格式。列表C展示了使用format()方法的例子(您可以参考类文档来获取格式定义符的完整列表)。

// include class
include ("Date.php");

// initialize object
$d = new Date("2006-06-21 15:45:27");

// retrieve date as formatted string
echo $d->format("%A, %d %B %Y %T");
?>

    输出的结果如下:

    Wednesday, 21 June 2006 15:45:27

时区间进行转换

    现在您已经了解了基本的使用方法,下面让我们来讨论时区的问题,一旦您拥有了初始化的Date()对象,转换时区的工作就可以分为两个简答的步骤:

    使用setTZByID()方法告知Date类从哪个时区进行转换;
    然后,使用convertTZByID()方法告知Date类您所转换的目标时区。


    列表D展示了这部分代码:

// include class
include ("Date.php");

// initialize object
$d = new Date("2006-06-21 10:36:27");

// set local time zone
$d->setTZByID("GMT");

// convert to foreign time zone
$d->convertTZByID("IST");

// retrieve converted date/time
echo $d->format("%A, %d %B %Y %T");
?>

    在这个例子中,我将格林威治标准时间(GMT)转换为印度标准时间(IST),印度时间比格林威治时间早5.5小时,因此该脚本输出的结果是:

    Wednesday, 21 June 2006 16:06:27

    是不是很简单?以下列表E的例子展示了如果处理闰年和月底日期的问题:

// include class
include ("Date.php");

// initialize object
$d = new Date("2008-03-01 06:36:27");

// set local time zone
$d->setTZByID("GMT");

// print local time
echo "Local time is " . $d->format("%A, %d %B %Y %T") . "\n";

// convert to foreign time zone
$d->convertTZByID("PST");

// retrieve converted date/time
echo "Destination time is " . $d->format("%A, %d %B %Y %T");
?>

    输出如下:

    Local time is Saturday, 01 March 2008 06:36:27

    Destination time is Friday, 29 February 2008 22:36:27

    注意:您可能会奇怪时区ID是从何而来的,其实,您可以在类文档中找到时区ID的完整列表。

计算格林威治标准时间位移

    另外一个比较有效的方法是使用格林威治标准时间的位移量来转换时区,也就是利用指定时区和格林威治标准时间之间的差值来进行计算,PEAR的Date类为这一功能提供了便利,通过getRawOffset()方法就可以实现这一点,列表F展示了一个例子。

// include class
include ("Date.php");

// initialize object
$d = new Date("2006-06-21 10:36:27");

// set local time zone
$d->setTZByID("PST");

// get raw offset from GMT, in msec
echo $d->tz->getRawOffset();
?>

    在此,getRawOffset()方法计算了本地时间和格林威治标准时间的差值,输出结果如下:

    -28800000

    需要注意的是,位移量是以毫秒为单位进行计算的,所以您需要将它除以3600000(每小时中的毫秒数)来获取时区间相差的小时数。

    技巧:您可以使用inDaylightTime()来查看目标时区是否正处于夏令时状态,在类库文档中有关于此方法的详细信息。

添加和减少时间跨度

    您可以通过Date类库对时间数值执行复杂的日期计算,添加或者减少日期/时间数值,这些持续时间(时间跨度)可以表示为一个包含日、小时、分钟和/或秒的字符串组件,列表G展示了一个简单的例子。

// include class
include ("Date.php");

// initialize object
$d = new Date("2006-06-21 15:45:27");

// add 01:20 to it
$d->addSpan(new Date_Span("0,1,20,0"));

// retrieve date as formatted string
echo $d->format("%A, %d %B %Y %T");
?>

    在这个例子中,通过调用Date类的addSpan()方法和Date_Span()对象,我向初始的时间戳添加了1小时20分钟,输出结果显而易见:

    Wednesday, 21 June 2006 17:05:27

    和添加时间跨度一样,您可以使用减法,实际上,这就是subtractSpan()方法的目的,列表H展示了此方法的使用方法。

// include class
include ("Date.php");

// initialize object
$d = new Date("2006-06-21 15:45:27");

// add 01:20 to it
$d->addSpan(new Date_Span("0,1,20,0"));

// subtract 00:05 from it
$d->subtractSpan(new Date_Span("0,0,5,0"));

// retrieve date as formatted string
echo $d->format("%A, %d %B %Y %T");
?>

    在这个例子中,我首先添加了1小时和20分钟,然后又减去了5分钟,最终结果是添加了1小时和15分钟,输出结果如下:

    Wednesday, 21 June 2006 17:00:27

    正如上述的这些例子所展示的,PEAR的Date类库提供了直观而且高效的方法来执行复杂的日期计算,如果您正在寻找一种在不同位置转换时间戳的简便方法,那么我热忱地向您推荐这种方法。



Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini 7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini Nov 13, 2024 am 09:42 AM

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Feb 07, 2025 am 11:57 AM

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Program PHP untuk mengira vokal dalam rentetan Program PHP untuk mengira vokal dalam rentetan Feb 07, 2025 pm 12:12 PM

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Terangkan pengikatan statik lewat dalam php (statik: :). Terangkan pengikatan statik lewat dalam php (statik: :). Apr 03, 2025 am 12:04 AM

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apr 03, 2025 am 12:03 AM

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.

See all articles