我有这个后端,给我发送一个预先格式化的时间在一个设定的时区,但没有任何信息说的时区。字符串是这样的:“2013-08-26 16:55:00”。
我可以创造新的时刻。js instance,使用以下字符串:
var time = moment("2013-08-26 16:55:00") //this creates time in my tz
但这只会在我自己的时区创建一个示例。
Moment.js有一个插件,可以在特定时区创建对象的示例,效果很好,但我不能说我希望对象指向什么时间。
如果我在纽约,我这样做:
var time = moment("2013-08-26 16:55:00").tz("America/Los_Angeles");
结果时间将是13:55而不是16:55,但在洛杉矶。
我想要的是创建一个示例,它将显示16:55,但在洛杉矶时间。
我问这个是因为我想这么做
var now = moment.tz("America/Los_Angeles");
var end = moment("2013-08-26 16:55:00"); //plus something to convert LA time
var timeLeft = end.diff(now, "minutes");
有办法做到吗?
6条答案
按热度按时间dddzy1tm1#
在大多数情况下,您可以简单地这样做:
如果需要输入ISO8601以外的其他参数,则将格式字符串指定为第二个参数,将时区指定为第三个参数:
如果你需要使用moment的“严格解析”模式,那么这将进入第三个参数,时区将移动到第四个位置:
wmtdaxz32#
如果要计算特定时区中的所有内容,请使用
A)
moment.tz.setDefault("America/Los_Angeles");
对于我的用例(在一个节点中。js project)我只是在需要moment模块后设置好了它,就像这样:
此后对
moment()
的所有调用都将在“America/Los_Angeles”设置中创建时间,这与使用以下命令不同:B)
moment.tz("2017-03-04 00:00", "America/Los_Angeles")
或
C)
moment("2017-03-04 00:00").tz("America/Los_Angeles")
这两种方法都将以UTC时间创建moment对象(除非您已经更改了默认值),然后将其转换为洛杉矶时区。
在浏览器控制台中运行上面的B或C会产生:
Notice _d显示3月3日下午4点;这是因为moment对象是在UTC时间的3月4日12:00 am创建的,然后转换为太平洋时区,这比前一天晚8小时。
资料来源: www.example.com
p8h8hvxi3#
安装moment-timezone
> npm install moment-timezone
或参见https://momentjs.com/timezone/docs/
.tz(string,string)
moment.tz("2020-01-02 13:33:37", "Iran/Tehran")
oalqel3c4#
只是为了让一些事情非常清楚,这在其他答案中暗示,但没有真正说明:
*你绝对必须要么
..当使用
.tz(string datetime, [string format,] string zone)
函数时,如果你想解释你给予的datetime
参数是在你给出的zone
中。如果省略format
,请确保传递ISO8601格式的字符串整整两天,我都在原地打转,因为我的API传递了一个像
"03 Feb 2021 15:00"
这样的时间字符串,当然,它解析得很好,但它总是使用我本地机器上的时区,然后转换为我给出的时区:这是非常令人困惑的:解析显然工作得很好,因为日期是正确的,但时间总是错误的,无论机器和给定的区域字符串之间有多少小时
切换到ISO格式输入工作:
正如声明:
我希望这能为某人节省一些时间
qmb5sa225#
我有一个类似的问题,我不得不使用纽约为基础的时间,所以我不得不考虑日光节约。我试着使用上面的几个答案,但无法让它工作。然后我像下面的代码一样解决了我的问题
或者您可以这样做,当您在本地显示时,将考虑其自身的时间偏移。
这会给你一个ISO字符串,你可以使用如下
moment(date).local().format('dddd, MMM DD YYYY, hh:mm A')
或者以任何你想显示的格式
g52tjvyc6#
可以在初始化期间设置时刻的时区,而无需使用。tz()函数,如下所示:
在这种情况下,'yourTimezone'常量将对应于'YYYY-MM-DD HH:mm z'输入模板的'z'符号。同时,你不会改变初始化对象的时区,而只是正确地将其解析为输入值。