【问题标题】:Converting a mysql UTC_TIMESTAMP to CST and MST using Javascript使用 Javascript 将 mysql UTC_TIMESTAMP 转换为 CST 和 MST
【发布时间】:2019-03-21 19:38:14
【问题描述】:

我进行了无休止的搜索,但找不到适合我的解决方案。我将记录存储在 mysql 数据库中,该数据库记录了它创建的 UTC 时间 (UTC_TIMESTAMP())。我需要在本地时间将数据呈现给用户(使用 JavaScript)。我尝试了以下方法,但它不起作用:

JavaScript:

function localizeDateStr(dateToConvert,divId){
    newDate = new Date(dateToConvert);
    document.getElementById(divId).innerHTML = newDate.toString();
}

HTML:

<div id="<?php echo $divId ?>" class="td-short"></div>
<script type="text/javascript">window.onload = localizeDateStr('<?php echo $entryTime;?>','<?php echo $divId;?>');</script>

存储在数据库中的 UTC 日期与显示的日期相同。我没有看到转换后的日期。任何帮助,将不胜感激。请指教。

【问题讨论】:

  • dateToConvert 中的究竟是什么?请提供示例输入。
  • 一个例子是'2019-03-20 17:43:53'。
  • 屏幕上显示的是 2019 年 3 月 20 日星期三 17:43:53 GMT-0600(山地夏令时间)

标签: javascript mysql utc


【解决方案1】:

通过Date构造函数(或通过Date.parse)解析字符串对输入字符串的格式非常敏感。使用您在 cmets '2019-03-20 17:43:53' 中提供的值,大多数 实现将根据本地时间 来解释它。然而,the specification 并不要求遵守这一点,因为它只描述了一种非常特殊的格式。其他任何内容都取决于实现。

假设您的字符串始终采用这种格式,并且您希望将其解释为 UTC,您的选择是:

  • 调整字符串以在日期和时间部分之间包含T 分隔符,并以Z 结尾以指示UTC。

    var newDate = new Date(dateToConvert.replace(' ','T') + 'Z');
    
  • 自己解析字符串:

    var parts = dateToConvert.split(/[-: ]/g).map((x) => parseInt(x));
    parts[1]--; // Months are 0-11, so adjust
    var newDate = new Date(Date.UTC(...parts));
    
  • 使用像Luxon这样的库:

    var dt = luxon.DateTime.fromFormat(dateToConvert,
                                       'yyyy-MM-dd HH:mm:ss', { zone: 'UTC' });
    var newDate = dt.toJSDate();
    

    Moment:

    var newDate = moment.utc(dateToConvert).toDate();
    

【讨论】:

  • 太棒了。谢谢你。我选择了 var newDate = new Date(dateToConvert.replace(' ','T') + 'Z');。您对使用哪种解决方案有偏好吗?
  • 如果你正在做一些重要的事情,我会推荐一个像 Luxon 这样的库。
猜你喜欢
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 2011-08-17
  • 1970-01-01
相关资源
最近更新 更多