根据时区将日期转换为时间戳

时间:2017-08-20 02:47:36

标签: php date timezone imap

我使用PHP Imap获取电子邮件,这是一个对象的示例:

Array
(
    [0] => stdClass Object
        (
            [subject] => Email Subject
            [from] => Sender <sender@domain.com>
            [to] => me@domain.com
            [date] => Sat, 19 Aug 2017 20:09:33 +1000
            [message_id] => <80d657c74967c8dc56138ca9552f0a2e@anyweb.apca.local>
            [size] => 1881518
            [uid] => 703
            [msgno] => 527
            [recent] => 0
            [flagged] => 0
            [answered] => 0
            [deleted] => 0
            [seen] => 0
            [draft] => 0
            [udate] => 1503137430
        )

)

虽然我确实有udate但我想仔细检查是否符合我的时区,所以我做了:

date_default_timezone_set('Australia/Melbourne');
$str = 'Sat, 19 Aug 2017 20:09:33 +1000';
echo strtotime($str); // 1503137373 ??

甚至尝试过:

$date = new DateTime($str, new DateTimeZone('Australia/Melbourne'));
$timestamp = $date->format('U');
echo $timestamp; // 1503137373 ?? 

因此,在这两种情况下,我得到的时间戳与从邮件服务器获取的时间戳不匹配,我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

  • udate - 由邮件服务器标记

  • 日期,日期 - 由客户标记

  

'date'和'udate'之间的区别似乎远不止于此   只是他们格式化的方式。

     

'date'是发件人在标题中写入的日期   邮件客户端,可能与现实无关。它的   取决于您的发件人知道正确的时间是什么;它可能是   几分钟,几天,几个月甚至几年。

     

'udate'是电子邮件发送到您的IMAP服务器的真实日期。

     

如果你想做一些好的东西,比如计算出多少电子邮件,请使用'udate'   你每天都会收到 - 或者像我一样,收到多少垃圾邮件。

http://titanic.fauser.edu/php/function.imap-headerinfo.php.htm

来自here

  

date - 在其标题中找到的消息日期

     

日期 - 与日期相同

     

udate - Unix时间中的邮件消息日期

答案 1 :(得分:0)

你可以做这样的事情

date_default_timezone_set('Australia/Melbourne');

$script_tz = date_default_timezone_get();

if (strcmp($script_tz, ini_get('date.timezone'))){
   echo 'Script timezone differs from ini-set timezone.';
} else {
   echo 'Script timezone and ini-set timezone match.';
}