从Date设置datetime-local的值

时间:2015-05-11 11:20:02

标签: javascript html 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>

我对此代码有两个问题:

  1. 有没有办法从Date转换为合法值而无需手动切片?
  2. 我希望字符串在datetime-local中显示为DD/MM/YYYY, hh:mm(例如05/11/2015, 14:10在GMT中为13:10但我在GMT + 1中,所以我想显示14:10)。当前显示的是05/11/2015, 01:10 PM。我想删除PM并在当地时间显示。
  3. 这可能是XY problem,所以如果我完全错误并且有更好的方式在html中显示日期时间选择器,我会很高兴听到。

8 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:1)

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>

See this

答案 2 :(得分:1)

替换此行

tk.after

elem.value = d.toISOString().slice(0,16);

这仍将打印&#34; am / pm&#34;最后,它负责调整当地价值的时间。

答案 3 :(得分:1)

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

  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());
  
<input id="dt" type="datetime-local" />

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

依靠别人的...

<input id="myDateTime" type="datetime-local">

<script>

    var dateString = "7/15/20 7:9:00 PM"

    if (dateString !== "") {

        var dateVal = new Date(dateString);
        var day = dateVal.getDate().toString().padStart(2, "0");
        var month = (1 + dateVal.getMonth()).toString().padStart(2, "0");
        var hour = dateVal.getHours().toString().padStart(2, "0");
        var minute = dateVal.getMinutes().toString().padStart(2, "0");
        var sec = dateVal.getSeconds().toString().padStart(2, "0");
        var ms = dateVal.getMilliseconds().toString().padStart(3, "0");
        var inputDate = dateVal.getFullYear() + "-" + (month) + "-" + (day) + "T" + (hour) + ":" + (minute) + ":" + (sec) + "." + (ms);

        $("#myDateTime").val(inputDate);
    }
</script>

分配给input.val()的值必须用YYYY-MM-DDThh:mm:ss.mss填充每个数字的占位符-参见Proper format for datetime-local value

答案 6 :(得分:0)

示例:

 <TextField
   variant="standard"
   style={{width:"50%"}}
 //type='datetime-local'
 type='datetime-local'
 InputLabelProps={{
  shrink: true                                              
  }}
defaultValue={new Date().toISOString().substring(0, (new Date().toISOString().indexOf("T")|0) + 6|0)}
/>

答案 7 :(得分:-1)

我个人使用过:

<input type="datetime-local" name="name" id="1234" value="<?php echo date('Y-m-d');echo 'T';echo date (H);echo ':';echo date(i);?>">