如何以HTML形式使用javascript预置今天的日期

时间:2019-09-16 08:34:50

标签: javascript html forms date getelementbyid

我正在与Django开发一个项目。 我有一个HTML网页,其中包含带有日期字段的表单。 我希望Javascript在用户登陆该网页后立即用今天的日期进行编译,以便他/她获得一种“默认日期”。

我的html页面(templates / aggiungi_terminologia.html)中有日期字段:

<div class="form-group">
    <label for="glossary_entry_input_21">Data di inserimento della terminologia</label>
    <small id="inputHelp" class="form-text text-muted">Compilare solo se è nota la data di pubblicazione del documento fonte, altrimenti inserire la data di oggi.</small>
    <input name="Data_inserimento_entry" type="date" value="01/01/1900" class="form-control" id="date_to_turn_into_today" placeholder="">              
</div>

,然后在表单末尾进行javascript调用:

{% load static %} 
<script> src="{% static 'get_today_date.js' %}"</script>

然后,在我的javascript函数内(static / js / get_today_date.js):

var today = moment().format('DD/MM/YYYY');
document.getElementById("date_to_turn_into_today").value = today;

由于我使用的是moment.js,因此我在 settings.py > INSTALLED_APPS

中添加了“ moment”

安装后,我将在控制台上运行:

pip install django-staticfiles-moment

但是,当我运行服务器时,我在该字段上看到的只是:

date field of my HTML form

我的控制台返回:

  

警告:app_glossario.glossary_entry.Data_inserimento_entry:   (fields.W161)提供了固定的默认值。           提示:您似乎将此字段的默认日期/时间/日期时间设置为默认值。这可能不是您想要的。如果你想   将当前日期设为默认日期,请使用django.utils.timezone.now

为什么javascript不替换日期? 我该如何运作? 注意:问题在于js,html和django之间的连接

4 个答案:

答案 0 :(得分:1)

继续评论是否重复,看看:

var now = new Date();
var day = ("0" + now.getDate()).slice(-2);
var month = ("0" + (now.getMonth() + 1)).slice(-2);
var today = now.getFullYear()+"-"+(month)+"-"+(day);
document.getElementById('inputDate').value = today;
<input type="date" id="inputDate" />

请同时检查this

答案 1 :(得分:1)

当我提供格式错误的日期字符串时,我看到了类似的行为(输入字段显示日期占位符而不是所需的日期)。输入元素似乎需要类似yyyy-mm-dd的格式。

这是使用香草JS的非常直观的解决方案。 input元素的默认值为日期(特定于区域设置)。

(您可能需要有关JS日期的大多数更多信息,here on MDN。)

const
  // Selects input element 
  dateInput = document.getElementById("date"),

  // Defines Date object
  date = new Date(),

  // Extracts component parts of Date object
  year = date.getFullYear(),
  month = date.getMonth(),
  day = date.getDate(),

  // Defines a function to add a leading zero if needed
  pad = part => part < 10 ? "0" + part : part,

  // Formats date to meet the `input` element's expectations -- like: `yyyy-mm-dd`
  // (Adds +1 to month b/c `getMonth()` uses a zero-based array)
  dateString = year + "-" + pad(month + 1) + "-" + pad(day);

// Inserts date string into input element
dateInput.defaultValue = dateString;

// Repeats this process for the "time" parts
/*
const
  timeInput = document.getElementById("time"),
  hours = date.getHours(),
  minutes = date.getMinutes(),
  seconds = date.getSeconds(),
  timeString = pad(hours) + ":" + pad(minutes) + ":" + pad(seconds);
timeInput.defaultValue = timeString;
*/
<input id="date" type="date" />
<!--
  // Optional input for time
  <input id="time" type="time" />
-->

答案 2 :(得分:1)

已解决

这就是我所做的。

在名为

的javascript文件中
  

get_today_date.js

存储在路径

  

static / js / get_today_date.js

我插入了

function get_today_date() {
var now = new Date();
var day = ("0" + now.getDate()).slice(-2);
var month = ("0" + (now.getMonth() + 1)).slice(-2);
var today = now.getFullYear()+"-"+(month)+"-"+(day);
document.getElementById('date_to_turn_into_today').value = today;
}

如此处https://stackoverflow.com/a/57953522/7658051所示。

然后在HTML页面的</body>结束标记之前,插入

{% load static %}

<script type="text/javascript" src={% static "js/get_today_date.js" %}></script>
<script> get_today_date() </script> 

它运行完美。

即使安装了控制台,也没有必要安装模块时刻

  

警告:app_glossario.glossary_entry.Data_inserimento_entry:(fields.W161)提供了固定的默认值。提示:您似乎将此字段的默认日期/时间/日期时间设置为默认值。这可能不是您想要的。如果要将当前日期作为默认日期,请使用django.utils.timezone.now

我的应用运行正常。

答案 3 :(得分:0)

以前的代码不起作用,只是因为我忘记了用HTML调用该函数,所以我只需要添加

 get_today_date()

但是最后,我不确定我是否正确安装了上一个javascript脚本所需的moment模块。