【问题标题】:Date time format changes when browser viewport is being resize调整浏览器视口大小时日期时间格式发生变化
【发布时间】:2020-01-31 23:14:54
【问题描述】:

场景是:

我在 javascript 中显示了完整的实时日期时间,包括当天的名称。 但是,当调整视口大小时,这种格式会占用太多空间,所以我的解决方案是 如果屏幕尺寸较小,请更改格式(使其更短)。

是这样的:

当用户的屏幕非常宽时,我想为她/他提供完整的日期时间和日期,如下所示:

“23:34:39 - 2019 年 10 月 3 日 - 星期四”

当用户使用平板格式时应该是:

“23:34:39 - 2019 年 10 月 3 日 - 星期四”

当用户使用屏幕非常小的手机或旧手机时,格式应为:

“23:34:39 - 2019-10-03 - Thu” 如果代码检测到更小的屏幕,我将删除秒数。

我在这里找到了几个关于 rezise(function()); 的帖子。 here 和 addEventListener here 也是另一个 here 所以我对我的代码做了一些修改,但我似乎无法让它工作,添加 addEventListener 后根本没有显示。

这是我的 jsclock.js

    window.addEventListener("resize", function() {
    if (window.matchMedia("(min-width: 1000px)").matches) {
        function date_time(id) {

        date = new Date;
        year = date.getFullYear();
        month = date.getMonth();
        months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
        d = date.getDate();
        day = date.getDay();
        days = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
        h = date.getHours();
        if(h<10)
        {
                h = "0"+h;
        }
        m = date.getMinutes();
        if(m<10)
        {
                m = "0"+m;
        }
        s = date.getSeconds();
        if(s<10)
        {
                s = "0"+s;
        }
        result = ''+h+':'+m+':'+s+' &nbsp; &#10070; &nbsp; '+months[month]+' '+d+', ' +year+' &nbsp; &#10070; &nbsp;  '+days[day]+'';
        document.getElementById(id).innerHTML = result;
        setTimeout('date_time("'+id+'");','1000');
        return true;
}
    } else if (window.matchMedia("(min-width: 800px)").matches) {
        function date_time(id) {

        date = new Date;
        year = date.getFullYear();
        month = date.getMonth();
        months = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
        d = date.getDate();
        day = date.getDay();
        days = new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
        h = date.getHours();
        if(h<10)
        {
                h = "0"+h;
        }
        m = date.getMinutes();
        if(m<10)
        {
                m = "0"+m;
        }
        s = date.getSeconds();
        if(s<10)
        {
                s = "0"+s;
        }
        result = ''+h+':'+m+':'+s+' &nbsp; &#10070; &nbsp; '+months[month]+' '+d+', ' +year+' &nbsp; &#10070; &nbsp;  '+days[day]+'';
        document.getElementById(id).innerHTML = result;
        setTimeout('date_time("'+id+'");','1000');
        return true;
}
    } else (window.matchMedia("(min-width: 200px)").matches) {
        function date_time(id) {

        date = new Date;
        year = date.getFullYear();
        month = date.getMonth();
        months = new Array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12');
        d = date.getDate();
        if(d<10)
        {
                d = "0"+d;
        }
        day = date.getDay();
        days = new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
        h = date.getHours();
        if(h<10)
        {
                h = "0"+h;
        }
        m = date.getMinutes();
        if(m<10)
        {
                m = "0"+m;
        }
        s = date.getSeconds();
        if(s<10)
        {
                s = "0"+s;
        }
        result = ''+h+':'+m+':'+s+' &nbsp; &#10070; &nbsp; ' +year+'-'+months[month]+'-'+d+'  &nbsp; &#10070; &nbsp;  '+days[day]+'';
        document.getElementById(id).innerHTML = result;
        setTimeout('date_time("'+id+'");','1000');
        return true;
}
    }

以及我如何显示它。

span id="date_time"></span>
<script type="text/javascript">window.onload = date_time('date_time');</script>

【问题讨论】:

  • 旁注:23:34:39 - 2019-10-03 - Thu 占用的空间与23:34:39 - Oct 3, 2019 - Thu 一样多,因此进行这种替换没有多大意义。放弃秒数和日期?
  • @Mike'Pomax'Kamermans ,我只想在可用的最小屏幕上放置秒数,但如果用户有一个宽屏幕,我想提供包括秒数和天数在内的所有内容。我会挤压根据用户的视口大小为用户提供尽可能多的详细信息。
  • 当然,但这只会让使用不同的字符串变得更加重要。选择你的断点宽度,然后为每个断点找出哪个级别的详细文本有效(并且可能考虑像引导程序这样的东西,它可以为你做很多管理工作,甚至在你用col-sm、@等类标记元素的地方987654329@、col-l 等,它只是自动隐藏/显示)

标签: javascript


【解决方案1】:

为所有时间戳生成 HTML:

<span class="size-l date-time">nice and long datetimestamp<span>
<span class="size-m date-time">shorter datetimestamp<span>
<span class="size-s date-time">shortstamp</span>

然后默认使用 CSS 隐藏它们,使用媒体查询取消隐藏需要取消隐藏的任何内容。这里完全没有理由使用 JS:

.date-time { display: none; }

@media screen and (min-width: 300px) {
 .size-s .date-time { display: inline-block; }
}

@media screen and (min-width: 576px) {
 .size-m .date-time { display: inline-block; }
}

@media screen and (min-width: 800px) {
 .size-l .date-time { display: inline-block; }
}

【讨论】:

  • 它不起作用..当我调整浏览器大小时它什么也不显示“但是”你的回答给了我很多想法..所以我所做的是我删除了 .date-time类,因为“显示:无”属性使其不可见。我保留的是那些 .size-* 类,对于每个媒体查询,我都将它们三个都放入,然后将“display:inline”放入我想要出现的类中,并将“display:none”放入其余部分。
  • 仍然因为您给我的想法而投票......谢谢您,先生。我现在正在按照我的意愿工作 :)
猜你喜欢
  • 1970-01-01
  • 2012-02-23
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-29
相关资源
最近更新 更多