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)
这个代码有两个问题:
Date为合法值而无需手动切片?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)
以下函数将采用日期对象(例如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)
该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)
这是我的解决方案,使其与时间戳一起使用:
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)
| 归档时间: |
|
| 查看次数: |
8316 次 |
| 最近记录: |