使用 Javascript 将 mysql UTC_TIMESTAMP 转换为 CST 和 MST

Converting a mysql UTC_TIMESTAMP to CST and MST using Javascript

我进行了无休止的搜索,但找不到适合我的解决方案。我将记录存储在 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 日期与正在使用的日期相同 displayed.I 我没有看到转换后的日期。任何帮助,将不胜感激。请指教

通过Date构造函数(或通过Date.parse)解析字符串对输入字符串的格式非常敏感。根据您在评论 '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();