从Date设置datetime-local的值

Ben*_*ler 9 html javascript datetime

我想用当前日期和时间设置datetime-local输入的值.现在我有一个丑陋的解决方案,涉及切割前17个字符.此外,它以GMT而不是当地时间设置时间.我的代码如下:

<input type="datetime-local" name="name" id="1234">

<script type="text/javascript">
  var d = new Date();
  var elem = document.getElementById("1234"); 
  elem.value = d.toISOString().slice(0,16);
</script>
Run Code Online (Sandbox Code Playgroud)

这个代码有两个问题:

  1. 有没有办法从a转换Date为合法值而无需手动切片?
  2. 我希望字符串显示在datetime-local中DD/MM/YYYY, hh:mm(例如,05/11/2015, 14:10它是13:10GMT但我在GMT + 1,所以我想显示14:10).目前显示的是05/11/2015, 01:10 PM.我想删除PM并在当地时间显示.

这可能是一个XY问题,所以如果我完全错误并且有更好的方法在html中显示日期时间选择器,我会很高兴听到.

neu*_*ino 31

我最终减去getTimezoneOffset分钟来调整toISOString值:

var now = new Date();
now.setMinutes(now.getMinutes() - now.getTimezoneOffset());
document.getElementById('dt').value = now.toISOString().slice(0,16);
Run Code Online (Sandbox Code Playgroud)
<input id="dt" type="datetime-local" />
Run Code Online (Sandbox Code Playgroud)

  • 我希望有更多内置的东西来生成日期时间本地输入所需的格式,但这个答案有效并且足够简单。谢谢! (5认同)

owe*_*ncm 9

以下函数将采用日期对象(例如new Date())并返回格式正确的字符串<input type='datetime-local'>

const dateForDateTimeInputValue = date => new Date(date.getTime() + new Date().getTimezoneOffset() * -60 * 1000).toISOString().slice(0, 19)
Run Code Online (Sandbox Code Playgroud)

  • 所以正确的解决方案是: const dateForDateTimeInputValue = date =&gt; new Date(date.getTime() + date.getTimezoneOffset() * -60 * 1000).toISOString().slice(0, 19)` (4认同)

Bel*_*ash 7

toISOString函数负责将本地日期 ( new Date) 转换为 GMT。

如果您不想使用 GMT 然后进行切片,则需要使用纯 Date 构造函数和所有 getX 函数,其中 X 是(日、月、年...)

此外,您需要使用Number一个函数来扩展该对象,该函数将帮助您返回01而不是1保留dd/mm/yyyy, hh/mm格式。

让我调用这个原型函数AddZero

      <input type="datetime-local" name="name" id="1234">

     <script type="text/javascript">
       Number.prototype.AddZero= function(b,c){
        var  l= (String(b|| 10).length - String(this).length)+1;
        return l> 0? new Array(l).join(c|| '0')+this : this;
     }//to add zero to less than 10,


       var d = new Date(),
       localDateTime= [(d.getMonth()+1).AddZero(),
                d.getDate().AddZero(),
                d.getFullYear()].join('/') +', ' +
               [d.getHours().AddZero(),
                d.getMinutes().AddZero()].join(':');
       var elem=document.getElementById("1234"); 
       elem.value = localDateTime;
     </script>
Run Code Online (Sandbox Code Playgroud)

看到这个


hug*_*ige 5

这是我的解决方案,使其与时间戳一起使用:

  function timestampToDatetimeInputString(timestamp) {
    const date = new Date((timestamp + _getTimeZoneOffsetInMs()));
    // slice(0, 19) includes seconds
    return date.toISOString().slice(0, 19);
  }
  
  function _getTimeZoneOffsetInMs() {
    return new Date().getTimezoneOffset() * -60 * 1000;
  }

  document.getElementById('dt').value = timestampToDatetimeInputString(Date.now());
  
Run Code Online (Sandbox Code Playgroud)
<input id="dt" type="datetime-local" />
Run Code Online (Sandbox Code Playgroud)