Javascript 使用像PHP';s日期和时间
我是一个典型的服务器端开发人员,在前端显示时间值时感觉有点像落汤鸡。如何从moment.js中获取PHP的date()和strotime()函数之类的行为?我只希望unix时间戳以H:I:s格式显示,反之亦然 到目前为止,我已经从现有示例代码和文档中尝试了以下内容:Javascript 使用像PHP';s日期和时间,javascript,php,jquery,date,momentjs,Javascript,Php,Jquery,Date,Momentjs,我是一个典型的服务器端开发人员,在前端显示时间值时感觉有点像落汤鸡。如何从moment.js中获取PHP的date()和strotime()函数之类的行为?我只希望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(timestamp).format(H:i:s);
moment().duration(timestamp).format(H:i:s);
moment.unix(timestamp).format(h:mm:ss);
moment(formatted,'H:i:s');
没有一个能正常工作。这可能会被标记为重复,因为有很多moment.js问题,但我不知道这是对库本身的更新还是稍微不同的上下文,我还没有找到一个对我有效的现有解决方案
有人对这两个简单的任务有什么建议吗
编辑:
我从中提炼出两个不同的问题。一个是,当医生说应该工作的时候,函数给出了奇怪的值:
moment(1437462000).format('h:mm:ss')
例如,它应该返回utc 7:00:00,返回utc 10:17:42。在这种情况下,可以使用矩.unix(143746200).utc().format('h:mm:ss')来解决这个问题,但这会导致第二个问题-从日期转换回时间戳时,.utc()函数似乎被忽略:
timestamp = moment(formatted,'DD/MM/YYYY H:m:s').utc().unix();
无论是否包含.utc()函数,仍将返回一个时区更正值(在我的情况下,这是不正确的,因为所述格式化时间与客户端计算机无关) 您应该了解以下几点:
date
时间戳基于秒,而moment和JavaScript的date
对象默认都使用毫秒。使用moment.unix
函数可以让您通过秒数,这与将时间戳乘以1000完全相同UTC
功能。该函数有两种形式:
moment.utc(input) // parsing form
moment(input).utc() // conversion form
这两种形式都需要一些输入,并在UTC模式下产生一个瞬间。区别在于如何解释输入。在这两种情况下,如果输入值是明确的,则结果是相同的。对于字符串,这意味着输入将包含Z
(来自ISO8601)或基于UTC的偏移量。所有其他形式都是模棱两可的。例如,如果我通过了“2015-11-08 01:23:45”
,我将得到不同的结果,这取决于我是将该字符串解释为本地时间还是UTC
对于数字,它们总是以UTC表示为毫秒。但是,如果使用时刻(数字)
而不调用.utc()
,则该时刻将保留在本地模式,因此任何输出都将显示为本地时间moment.unix(input)
时,输入是秒数,但该时刻保持在本地模式。因此,要显示UTC时间,可以使用矩.unix(input).UTC()
M
是月,M
是分钟H
是24小时制的小时,H
是12小时制的小时。如果要包含零填充,请使用两个连续的字母。例如,HH:mm:ss
用于13:02:03
而h:m:s
用于1:2:3
X
格式化程序不关心时刻处于哪种模式。它将始终以UTC发出秒数。同样地,x
格式化程序以UTC为单位返回毫秒,正如moment.valueOf()
一样moment.unix(1437462000).utc().format()
返回“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
对于那些进来仍在寻找date()和strotime()的直接PHP等价物的人,这里是我最终使用的。匹配php基本上意味着完全忽略任何类型的本地时间信息,确保所有信息都是UTC格式的。但是,这个任务在时间戳->日期和日期->时间戳的情况下有点不同,所以您必须小心 日期() 将时间戳转换为格式化日期而不进行任何客户端时区更正
var formatted = moment.unix(timestamp).utc().format('h:mm:ss');
strottime()
将UTC格式的日期转换回时间戳,而不将其更正为本地时间:
var new_timestamp = moment.utc(formatted_utc,'DD/MM/YYYY H:m:s').format('X')
//where 'DD/MM/YYYY H:m:s' is the formatted date's format, and
//'X' outputs a unix timestamp without milliseconds.
注:
- 在调用中不要使用带括号的矩() 矩().utc(日期、格式)将返回本地时间值,而不是您的 输入
- Moment.js不喜欢在格式中使用“i”表示分钟, 不像php
矩.unix(时间戳)
。这些值有多大的错误?您有多确定时间戳是正确的?矩(timestamp)返回了非常奇怪的值