我想用当前日期和时间设置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>
我对此代码有两个问题:
Date
转换为合法值而无需手动切片?DD/MM/YYYY, hh:mm
(例如05/11/2015, 14:10
在GMT中为13:10
但我在GMT + 1中,所以我想显示14:10
)。当前显示的是05/11/2015, 01:10 PM
。我想删除PM并在当地时间显示。这可能是XY problem,所以如果我完全错误并且有更好的方式在html中显示日期时间选择器,我会很高兴听到。
答案 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>
答案 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);?>">