从Date设置datetime-local的值

时间:2022-10-19 04:23:58

I would like to set the value of a datetime-local input with the current date and time. Right now I have an ugly solution that involves slicing the first 17 characters. In addition it sets the time in GMT instead of the local time. My code is as follows:

我想用当前日期和时间设置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>

I have two problems with this code:

这个代码有两个问题:

  1. Is there a way to convert from a Date to a legal value without manually slicing the string?
  2. 有没有办法从Date转换为合法值而无需手动切片?

  3. I would like the string to be displayed in the datetime-local as DD/MM/YYYY, hh:mm (e.g. 05/11/2015, 14:10 it is 13:10 in GMT but I am in GMT+1 so I want to display 14:10). What is currently displayed is 05/11/2015, 01:10 PM. I would like to remove the PM and display in local time.
  4. 我希望字符串在datetime-local中显示为DD / MM / YYYY,hh:mm(例如05/11/2015,14:10格林尼治标准时间是13:10,但我在GMT + 1中,所以我想要显示14:10)。当前显示的是05/11/2015,01:10 PM。我想删除PM并在当地时间显示。

This might be an XY problem, so if I am doing it completely wrong and there is a better way to display datetime pickers in html, I would be happy to hear.

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

3 个解决方案

#1


The toISOString function is responsible of converting your local date (new Date) into GMT.

toISOString函数负责将您的本地日期(新日期)转换为GMT。

If you don't want to use GMT then slice, you need to use the pure Date constructor and all of the getX functions, where X is (days, month, year...)

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

In addition, you'll need to extend the Number object with a function that will help you to return 01 instead of 1 for example, to preserve the dd/mm/yyyy, hh/mm format.

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

Let me call this prototype function AddZero

让我称之为原型函数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


Replace this line

替换此行

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

with

elem.value = d.toLocaleString();

This will still print "am/pm" at the end but it takes care of the time adjustment to local values.

这仍将在结尾处打印“am / pm”,但它会处理对本地值的时间调整。

#3


Personally i used :

个人我用过:

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

#1


The toISOString function is responsible of converting your local date (new Date) into GMT.

toISOString函数负责将您的本地日期(新日期)转换为GMT。

If you don't want to use GMT then slice, you need to use the pure Date constructor and all of the getX functions, where X is (days, month, year...)

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

In addition, you'll need to extend the Number object with a function that will help you to return 01 instead of 1 for example, to preserve the dd/mm/yyyy, hh/mm format.

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

Let me call this prototype function AddZero

让我称之为原型函数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


Replace this line

替换此行

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

with

elem.value = d.toLocaleString();

This will still print "am/pm" at the end but it takes care of the time adjustment to local values.

这仍将在结尾处打印“am / pm”,但它会处理对本地值的时间调整。

#3


Personally i used :

个人我用过:

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