php 设置莫斯科时区,momentjs和php中的时区不一致

我们遇到问题需要在php和momentjs同步中获取日期时间表示.让我们说我们在莫斯科有一个带时区的约会时间:

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

但是如果我们使用momentjs在前端解析相同的日期时间字符串:

moment('2013-06-10T10:40:00.000+04:00').format('D.M.YYYY h:mm:ss');

输出是:

10.6.2013 8:40:00

浏览器时区是欧洲/柏林(02:00).使用utc()也会以错误的方式计算日期.我们需要的是这个地方的当地时间,所以在php的情况下它是正确的.给一个解析字符串给momentjs:

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

会做的伎俩,所以时区被删除.但我们实际上应该全局设置解析字符串,但是如何?

谢谢你的建议.

解决方法:

我相信你受到moment.js issue 611的影响 – 这实际上是一个功能请求,因为JavaScript无论如何都不会本地执行此操作.问题评论中有一些可接受的解决方法.请在那里添加您自己的反馈.谢谢.

UPDATE

随着moment.js版本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(输入)的额外调用将​​仅从字符串中提取偏移部分(04:00)并将其设置为用于格式化的区域.还有其他选择.请参阅文档中的moment#zone.

更新#2

随着moment.js版本2.3.0的发布,现在只需一个电话:

var m = moment.parseZone(input);

标签:php,timezone,datetime,momentjs

来源: https://codeday.me/bug/20190620/1244354.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值