我遇到显示正确时间的问题。我有一个php脚本,当单击一个按钮时,它会将CURRENT_TIMESTAMP插入到数据库中。服务器位于亚利桑那州,我在太平洋标准时间。当我在脚本中调用时间时显示亚利桑那州时间,但我需要它来显示用户时间。所以2015-02-18 16:06:28亚利桑那时间,我的时间是2015-02-18 15:06:28。
我如何获得正确的时间。我正在使用moment.js,但无论我如何格式化它都会显示错误的时间。我不确定但DST是不是被考虑了?
var time_in = time_in;//format 2015-02-18 16:17:33
var timeIn = moment.utc(time_in, "HH:mm a").format("HH:mm a");
答案 0 :(得分:0)
看起来您正在使用Javascript来获取客户端的时间,但之后却没有将其传递给PHP。我不确定您的应用的结构,但您可以使用input
创建type="hidden"
标记。然后使用Javascript,找到元素并将其value
设置为Date()
。
以下是一个示例:http://jsfiddle.net/43jfefuq/
现在,当您使用PHP提交此表单时,该字段中的值将是客户端的本地时间。
答案 1 :(得分:0)
Moment.js
将日期解析为区域设置日期时间。因此,当您执行moment.utc(time_in)
时,您将根据当地时间(PST)将其转换为UTC,向前或向后移动。
所以你需要做的是做moment.fn.utcOffset。亚利桑那州是UTC-07:00,所以我们希望在偏移量上添加+7。您可以使用moment.fn.zone执行相同操作,但已弃用。
var utcTime = moment.utc('2015-02-18 16:06:28').utcOffset(+7).format('YYYY-MM-DD HH:mm:ss')
// returns "2015-02-18 23:06:28" which is the UTC time
现在您拥有UTC时刻,您可以将其转换为客户端本地时间:
moment(moment.utc(utcTime).toDate()).format('YYYY-MM-DD HH:mm:ss')
// returns '2015-02-18 15:06:28' (which is PST)
上面的 moment.utc(utcTime).toDate()
只是将utc时间转换为您当地时间,然后使用momentjs
格式化
编辑:如果可能,您应该在发送到服务器时使用unix timestamp,然后您不必处理UTC或时区。您可以使用moment.unix(unixTimestamp).format('YYYY-MM-DD HH:mm:ss')