【问题标题】:Javascript - displaying locale time from mySQL TimeDateJavascript - 显示来自 mySQL TimeDate 的语言环境时间
【发布时间】:2015-04-20 04:15:45
【问题描述】:

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

【问题讨论】:

  • 是 PHP 还是 Javascript 获得了时间?因为 PHP 是服务器端,而 Javascript 是客户端。
  • php 正在使用 now(); 设置时间
  • 所以如果我的“时间戳”是 2015-02-18 15:00:00,并且我在 PST,我想显示 14:00 或 3:00 PM。如果我在 EST 想显示 18:00。
  • 哦,我误会了。我认为这是关于使用 PHP 在数据库中输入正确的日期。

标签: javascript php date timezone momentjs


【解决方案1】:

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') 转换为当地时间

【讨论】:

  • 谢谢你永远的跋涉。这正在得到我想要的结果。我没有考虑 utcOffset(+7)。
【解决方案2】:

看起来您正在使用 Javascript 来获取客户端的时间,但没有将其传递给 PHP。我不确定您的应用程序的结构,但您可以使用type="hidden" 创建一个input 标记。然后使用 Javascript,找到元素并将其设置为 valueDate()

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

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

【讨论】:

    猜你喜欢
    • 2020-07-10
    • 2020-06-19
    • 1970-01-01
    • 2019-03-22
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多