momentjs和php中的时区不一致性

momentjs和php中的时区不一致性,php,datetime,timezone,momentjs,Php,Datetime,Timezone,Momentjs,我们在同步php和momentjs中的datetime表示时遇到问题。假设我们在莫斯科有一个时区的datetime: 2013-06-10T10:40:00.000+04:00 用户应该可以看到本地时间:2013-06-10T10:40:00。无论他是在西班牙还是美国。以下php代码将产生我们需要的适当时间: $date = new DateTime('2013-06-10T10:40:00.000+04:00'); echo $date->format('d.m.Y H:i:s');

我们在同步php和momentjs中的datetime表示时遇到问题。假设我们在莫斯科有一个时区的datetime:

2013-06-10T10:40:00.000+04:00

用户应该可以看到本地时间:2013-06-10T10:40:00。无论他是在西班牙还是美国。以下php代码将产生我们需要的适当时间:

$date = new DateTime('2013-06-10T10:40:00.000+04:00');
echo $date->format('d.m.Y H:i:s');
输出为:

10.06.2013 10:40:00
10.6.2013 8:40:00
但如果我们在前端用momentjs解析相同的datetime字符串:

moment('2013-06-10T10:40:00.000+04:00').format('D.M.YYYY h:mm:ss');
moment('2013-06-10T10:40:00.000+04:00', "YYYY-MM-DD HH:mm").format('D.M.YYYY h:mm:ss')
输出为:

10.06.2013 10:40:00
10.6.2013 8:40:00
时区为欧洲/柏林(+02:00)。使用utc()也会以错误的方式计算日期。我们需要的是当地时间,所以对于php来说,它是正确的。为momentjs提供解析字符串:

moment('2013-06-10T10:40:00.000+04:00').format('D.M.YYYY h:mm:ss');
moment('2013-06-10T10:40:00.000+04:00', "YYYY-MM-DD HH:mm").format('D.M.YYYY h:mm:ss')
将完成此操作,因此时区将被删除。但是我们实际上应该全局设置解析字符串,但是如何设置呢


谢谢您的建议。

尝试将PHP时区设置为欧洲/柏林

 date_default_timezone_set("Europe/Berlin")

可能是您的PHP安装/服务器使用了不同的时区。

我相信您受到了-的影响,这实际上是一个功能请求,因为JavaScript本身并不这样做。在问题评论中有一个可以接受的变通方法。请在这里添加您自己的反馈。谢谢

更新 随着版本2.1.0的发布,您现在可以执行以下操作:

var input = "2013-06-10T10:40:00.000+04:00";
var m = moment(input).zone(input);
var s = m.format('D.M.YYYY h:mm:ss');
.zone(input)
的额外调用将仅从字符串中提取偏移部分(
+04:00
),并将其设置为用于格式化的区域。还有其他选择。请参阅文档中的

更新#2 随着版本2.3.0的发布,这现在是一个单一的调用:

var m = moment.parseZone(input);

时区设置正确。Php也显示了正确的时间。Momentjs是问题所在。Thx,我会参与其中。