我使用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 ??
因此,在这两种情况下,我得到的时间戳与从邮件服务器获取的时间戳不匹配,我在这里缺少什么?
答案 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.';
}