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:
这个代码有两个问题:
- Is there a way to convert from a
Date
to a legal value without manually slicing the string? - 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 is13:10
in GMT but I am in GMT+1 so I want to display14:10
). What is currently displayed is05/11/2015, 01:10 PM
. I would like to remove the PM and display in local time.
有没有办法从Date转换为合法值而无需手动切片?
我希望字符串在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>
#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>
#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);?>">