解决javaScript在不同时区new Date()显示值不同问题

更新日期: 2019-07-10阅读: 2.9k标签: 日期

在日期格式化时遇到的问题,日期格式化方法在最下面。

如果在中国时区    formatDate('2019-07-09')  结果是 ‘2019-07-09’
如果 在夏威夷时区 utc-10:00 或者别的时区  formatDate('2019-07-09')  结果是 ‘2019-07-08’

时区不同导致日期格式化结果不同,查看代码发现不同时区 new Date(str)的结果不同,下面是浏览器测试例子:

时区设置为北京 utc+08:00

var str = '2019-07-09';
var str1 = '2019-07-09 13:00:00';
console.log(new Date(str));
console.log(new Date(str1));
VM158:3 Tue Jul 09 2019 08:00:00 GMT+0800 (China Standard Time)
VM158:4 Tue Jul 09 2019 13:00:00 GMT+0800 (China Standard Time)


时区设置为夏威夷 utc-10:00 

var str = '2019-07-09';
var str1 = '2019-07-09 13:00:00';
console.log(new Date(str));
console.log(new Date(str1));
VM155:3 Mon Jul 08 2019 14:00:00 GMT-1000 (Local Standard Time)
VM155:4 Tue Jul 09 2019 13:00:00 GMT-1000 (Local Standard Time)


解决办法是在方法中添加如下代码

if (typeof str == 'string' && str.indexOf(':') == -1) {
        str += ' 00:00:00';
}

感觉解决办法不是太好,如果有更好的办法请大神告知,谢谢

//日期格式化方法

function formatDate(str, fmt) {
    if (!str) return '';
    fmt = fmt || "yyyy-MM-dd"; //默认只显示年月日
    if (this.getIEVersion() > -1) {
        str = str.replace(/-/g, "/")
    }
  //解决问题的代码
    if (typeof str == 'string' && str.indexOf(':') == -1) {
        str += ' 00:00:00';
    }
    var date = new Date(str);
    var o = {
            "M+": date.getMonth() + 1, //月
            "d+": date.getDate(), //日
            "h+": date.getHours() % 12 == 0 ? 12 : date.getHours() % 12, //时
            "H+": date.getHours(), //小时
            "m+": date.getMinutes(), //分
            "s+": date.getSeconds(), //秒
            "q+": Math.floor((date.getMonth() + 3) / 3), //季
            "S": date.getMilliseconds() //毫秒
        },
        week = {
            "0": "\u65e5",
            "1": "\u4e00",
            "2": "\u4e8c",
            "3": "\u4e09",
            "4": "\u56db",
            "5": "\u4e94",
            "6": "\u516d"
        };
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
    }
    if (/(E+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "\u661f\u671f" : "\u5468") : "") + week[date.getDay() + ""]);
    }
    for (var k in o) {
        if (new RegExp("(" + k + ")").test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        }
    }
    return fmt;
},

来自:https://www.cnblogs.com/yuanqt/archive/2019/07/10/11164853.html


链接: https://www.fly63.com/article/detial/4138

JS获取当前月的最后一天

为了更好的讲这节的内容,提示一个 JS 处理日期的小技巧,想获取上个月最后一天,只需要设置SetDate参数为0即可。使用 JS 获取当前月的最后一天,咱们通常的思路先获取下个月的第一天

Js如何获取某一天所在的星期?

我们这里来获取今天所在星期的始末日期,我们可以通过(new Date).getDay()来获取今天是星期几,然后再通过这个减去或者加上一定的天数,就是这个星期的开始日期和结束日期。

vue 循环取值日期格式化,字符串截取处理

用vue取值页面遍历时,每次都搜索js日期格式化和字符串长度截取,这次记录下来,以后从这里直接拿即可。html代码如下

js中Date的构造函数解读

javascript中的内置对象是我们经常会用到的,那么今天我们就来说说Date的四种构造方法吧,new Date()这是我们最常使用也最熟悉不过的Date对象的构造方法了,通过无参数的构造函数我们可以默认获取到一个代表实例化时的Date对象

js如何获取某一天所在的星期?

我们这里来获取今天所在星期的始末日期,我们可以通过(new Date).getDay()来获取今天是星期几,然后再通过这个减去或者加上一定的天数,就是这个星期的开始日期和结束日期。

ElementUI日期选择器时间选择范围限制

ElementUI是饿了么推出的一套基于vue2.x的一个ui框架。官方文档也很详细,这里做一个element-ui日期插件的补充。官方文档中使用picker-options属性来限制可选择的日期,这里举例子稍做补充。

js获取一段时间内的间隔日期

js获取指定时间范围内指定间隔天数的所有日期,前端js,已知开始时间a、结束时间b和间隔天数c,要求取在a-b这两个时间范围内、间隔c天的所有日期。

前端的各种日期操作

虽然现在处理日期方面已经有了很成熟的也很好用的库,例如(momentjs和date-fns),但是在实际开发中,我们有时候可能并不需要整个库。所以我就在下面整理了在前端开发时对日期时间的各种操作,也算是比较全的了

Safari Date() 函数对日期时间字符串(yyyy-MM-dd HH:mm:ss) 提示NaN的问题

今天发现一个奇怪的问题,在iPhone使用 safari 选择定时发布文章到OSC,选择时间后提示不是合法的时间,判断时间的代码如下:在Chrome下会输出 pass,在Safari会输出 isNaN,根据 ECMAScript 5 ISO-8601 format support: 的说法

JavaScript将毫秒转换为日期格式?

给定一串毫秒数,如何使用JavaScript将它们转换为日期格式?下面本篇文章就来给大家介绍一下使用JavaScript将毫秒转换为日期格式的方法,希望对大家有所帮助。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!