DateTime和DateTimeZone的奇怪行为

亚历克斯·G。

这是我上一个问题的跟进问题该应用程序是javascript / php。在Javascript中,我正在获取本地时间戳和时区偏移量:

var timestamp = new Date().getTime();
var tzoffset = new Date().getTimezoneOffset();

我正在从伦敦进行测试,而我经过的时间代表格林尼治标准时间15:30:00。

然后,我将它们传递给服务器上的php脚本,该脚本需要将此时间戳记格式设置为H:MM:SS(即php的format('h:i:s', $time)。我从PHP开始使用以下代码:

$dt = new DateTime();
$dt->setTimestamp($timestamp / 1000);  //javascript includes milliseconds, php doesn't
echo $dt->format('h:i:s');

产生的输出07:30:00-是同一时间点,但使用服务器的时区(服务器在加利福尼亚州)。

然后,我使用此问题的技巧来获取时区并设置该时区

$tz = timezone_name_from_abbr(null, $tzoffset * 60, true);  //javascript's offset is in seconds
if($tz === false) $tz = timezone_name_from_abbr('', $tzoffset * 60, false);
$dt = new DateTime(null, new DateTimeZone($tz));
$dt->setTimestamp($timestamp / 1000);
echo $dt->format('h:i:s');

这产生了一个相当奇怪的结果02:30:00

然后,我将以上内容更改为:

$dt = new DateTime(null, new DateTimeZone('Europe/London'));
$dt->setTimestamp($timestamp / 1000);
echo $dt->format('h:i:s');

这产生了结果03:30:00

如何15:30:00根据客户端提供的信息使服务器输出

编辑:谢谢@MarkM,这对我来说很愚蠢-但这仍然不能完全解决问题,因为此代码:

$tz = timezone_name_from_abbr(null, $tzoffset * 60, true);  //javascript's offset is in seconds
if($tz === false) $tz = timezone_name_from_abbr('', $tzoffset * 60, false);
$dt = new DateTime(null, new DateTimeZone($tz));
$dt->setTimestamp($timestamp / 1000);
echo $dt->format('h:i:s');

现在产生14:30:00,即不考虑DST。任何想法如何解决这个问题?

编辑2:我忘记了javascript的getTimezoneOffset返回相反(即GMT从当前时间是多少分钟)。我在EDIT的代码顶部添加了这一行,现在可以正常使用:

$tzoffset = -$tzoffset;
马克·米勒

要将小时格式化为24小时格式,请使用大写字母H。

更改'h:i:s''H:i:s'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP - strtotime() 和 datetime 奇怪的行为

来自分类Dev

比较DateTime对象和JODA时的奇怪行为

来自分类Dev

||奇怪的Ruby行为 和 &&

来自分类Dev

加入和的奇怪行为

来自分类Dev

OpenXml 和奇怪的行为

来自分类Dev

Camera和SurfaceView的奇怪行为

来自分类Dev

时区和SimpleDateFormat奇怪的行为

来自分类Dev

$ .clone()和$ .data()奇怪的行为

来自分类Dev

查找和du的奇怪行为

来自分类Dev

systimestamp和sysdate的奇怪行为

来自分类Dev

Camera和SurfaceView的奇怪行为

来自分类Dev

$ .clone()和$ .data()奇怪的行为

来自分类Dev

strpos和Ø的奇怪行为

来自分类Dev

奇怪的printf和scanf行为

来自分类Dev

gluPerspective和gluLookAt的奇怪行为

来自分类Dev

ASLR 和 VirtualAlloc 的奇怪行为

来自分类Dev

TextView 和 ListView 的奇怪行为

来自分类Dev

DateTime.TryParse中的奇怪行为

来自分类Dev

momentjs-奇怪的行为与startOf和endOf

来自分类Dev

Python:和/或运算符奇怪的行为

来自分类Dev

C ++ float和int除法奇怪的行为

来自分类Dev

WordPress的WPDB和MySQL的奇怪的行为

来自分类Dev

CSS中奇怪的反斜杠和行为

来自分类Dev

parseInt和负零在javascript:奇怪的行为?

来自分类Dev

动作编号加和减奇怪的行为

来自分类Dev

StreamReader和EBCDIC的奇怪行为:为什么?

来自分类Dev

奇怪的行为:pcolormesh和meshgrid(简单)

来自分类Dev

MatchCollection和Regex匹配奇怪的行为

来自分类Dev

csvwrite和写入日期的奇怪行为