Javascript - 显示来自 mySQL TimeDate 的语言环境时间

Javascript - displaying locale time from mySQL TimeDate

我在显示正确时间时遇到问题。我有一个 php 脚本,当单击一个按钮时它会将 CURRENT_TIMESTAMP 插入到数据库中。服务器位于亚利桑那州,我在太平洋标准时间。当我在我的脚本中调用时间时,它显示亚利桑那州时间,但我需要它来显示用户时间。所以2015-02-1816:06:28亚利桑那时间,我的时间是2015-02-1815: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");

您似乎在使用 Javascript 获取客户端的时间,但并未将其传递给 PHP。我不确定您的应用程序的结构,但您可以使用 type="hidden" 创建一个 input 标签。然后使用 Javascript,找到元素并将其 value 设置为 Date()

这里有一个例子:http://jsfiddle.net/43jfefuq/

现在,当您使用 PHP 提交此表单时,字段中的值将是客户的当地时间。

Moment.js 将日期解析为语言环境日期时间。因此,当您执行 moment.utc(time_in) 时,您将根据本地时间 (PST) 将其转换为 UTC,向前或向后移动。

所以你需要做的是做一个 moment.fn.utcOffset. Arizona is UTC-07:00, so we would want to add +7 to the offset. You can do the same using 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')

转换为本地时间