Luc*_*sar 3 javascript php jquery date momentjs
我是一个典型的服务器端开发人员,感觉有点像水中的鱼,试图在前端显示时间值.如何从moment.js中获取PHP的date()和strtotime()函数等行为?我只想让unix时间戳以H:i:s格式出现,反之亦然.
到目前为止,我已经从现有的示例代码和文档中尝试了以下内容:
moment(timestamp).format(H:i:s);
moment().duration(timestamp).format(H:i:s);
moment.unix(timestamp).format(h:mm:ss);
moment(formatted,'H:i:s');
Run Code Online (Sandbox Code Playgroud)
不是单一的一个已经正常工作.这可能被标记为重复,因为那里有很多moment.js问题,但我不知道它是对库本身的更新还是稍微不同的上下文,我还没有找到一个对我有用的现有解决方案.
有人对这两个简单的任务有什么建议吗?
编辑: 我已经提炼出了两个不同的问题.一个是文档说应该工作的那些功能给出了奇怪的值:
moment(1437462000).format('h:mm:ss')
Run Code Online (Sandbox Code Playgroud)
例如,应该返回7:00:00 utc,返回10:17:42.在这种情况下,这可以通过使用moment.unix(1437462000).utc().format('h:mm:ss')来修复,但这导致了第二个问题 - .utc()函数似乎被忽略了从日期转换回时间戳时:
timestamp = moment(formatted,'DD/MM/YYYY H:m:s').utc().unix();
Run Code Online (Sandbox Code Playgroud)
无论是否包含.utc()函数,仍将返回时区校正值(在我的情况下,这是不正确的几个小时,因为格式化的时间与客户端计算机无关).
Mat*_*int 10
你应该意识到的一些事情:
Unix时间戳应始终以UTC表示.它们永远不会以数字形式调整时区.如果他们针对时区进行了调整,则在解释数字时进行,而不是在其表示中进行.
虽然传统上"Unix时间戳"以秒为单位,但许多环境使用的是毫秒.PHP的date时间戳基于秒,而moment和JavaScript的Date对象默认使用毫秒.使用该moment.unix函数将允许您传递秒数,并且与将时间戳乘以1000相同.
Moment有两种内置模式,local和UTC.默认模式是本地的.您提供的输入无关紧要,如果您未指定UTC,则将该时刻调整为本地.要指定UTC,请使用该utc功能.功能有两种形式:
moment.utc(input) // parsing form
moment(input).utc() // conversion form
Run Code Online (Sandbox Code Playgroud)
两种形式都需要一些输入,并在UTC模式下产生片刻.不同之处在于如何解释输入.在任何一种情况下,如果输入值是明确的,结果是相同的.对于字符串,这意味着输入将包含Z(来自ISO8601)或基于UTC的偏移量.所有其他形式都不明确.例如,如果我通过"2015-11-08 01:23:45",我会得到不同的结果,具体取决于我是将该字符串解释为本地时间还是UTC.
对于数字,它们始终被解释为UTC的毫秒数.但是,如果您在moment(number)没有调用的情况下使用,那么.utc()该时刻将保留在本地模式中,因此任何输出都将显示为本地时间.
当您呼叫时moment.unix(input),输入是几秒钟,但该时刻保留在本地模式.因此,要显示UTC时间,您可以使用moment.unix(input).utc().
如果您从其他系统预先记录的时间戳是数字形式,但已经远离UTC调整,那么它们是不正确的.你有糟糕的数据,Moment无法帮助你,除非你明确知道它们是如何偏离的,你编写代码来抵消它.
Moment的格式化程序区分大小写. M是几个月,m是几分钟. H24小时制h的小时数,12小时制的小时数.如果要包含零填充,请使用两个连续的字母.例如,HH:mm:ssfor 13:02:03vs. h:m:sfor 1:2:3.
Moment的X格式化程序并不关心当下的模式.它总是以UTC为单位发出秒数.同样,x格式化程序返回UTC的毫秒数moment.valueOf().
另外,你的最后一个例子:
moment.unix(1437462000).utc().format()
Run Code Online (Sandbox Code Playgroud)
退货"2015-07-21T07:00:00+00:00"- 我相信这是您期望的价值.
您也可以获得相同的原始时间戳,无论您尝试以下哪种方式:
moment.unix(1437462000).utc().format("X") // "1437462000"
moment.unix(1437462000).format("X") // "1437462000"
moment.unix(1437462000).utc().unix() // 1437462000
moment.unix(1437462000).unix() // 1437462000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8660 次 |
| 最近记录: |