html 日期格式:如何使用 Javascript 将开始日期设置为明天
html date form: how to set start date as tomorrow using Javascript
正在尝试将开始日期限制为明天(本地日期)。有人可以告诉为什么下面的代码不起作用:
<form method="POST">
<div>
<label for="s2">pickup_date</label>
<input type = 'date' name='pickup_date' required>
<br /><br />
</div>
</form>
<script>
var time = new Date();
var localTimeStr = time.toLocaleString('en-US', { timeZone: 'Asia/Shanghai' });
today = new Date(localTimeStr)
tomorrow = new Date(today.setDate(today.getDate() + 1)).toISOString().split('T')[0];
t = String(tomorrow)
document.getElementsByName("pickup_date")[0].setAttribute('min', t);
</script>
下面代码的输出是 2022-01-18:
var time = new Date();
var localTimeStr = time.toLocaleString('en-US', { timeZone: 'Asia/Shanghai' });
today = new Date(localTimeStr)
tomorrow = new Date(today.setDate(today.getDate() + 1)).toISOString().split('T')[0];
t = tomorrow.split('-')[0]+'-'+tomorrow.split('-')[1]+'-'+tomorrow.split('-')[2]
console.log(t)
但是,表格中的日历开始日期仍然是 2022-01-17。但是,当我手动设置
document.getElementsByName("pickup_date")[0].setAttribute('min', '2022-01-18');
日历正确地从 2022-01-18 开始。为什么!
OP 中有:
var time = new Date();
var localTimeStr = time.toLocaleString('en-US', { timeZone: 'Asia/Shanghai' });
today = new Date(localTimeStr)
这将 return 带有上海日期和时间的时间戳。
tomorrow = new Date(today.setDate(today.getDate() + 1)).toISOString().split('T')[0];
这将首先使用内置解析器将分配给 today 的字符串解析为主机系统的“本地”,ECMA-262 不需要这样做(参见 Why does Date.parse give incorrect results?)。
然后它将 return 一个 ISO 8601 格式的字符串,用于等效的 UTC 日期和时间。如果主机系统的偏移量为正,则根据时间戳中的时间,日期将是同一天或前一天。同样,对于具有负偏移量的主机,日期可能是同一天或第二天,具体取决于字符串中的时间和主机系统的偏移量。
关于格式化日期的问题很多,各种toLocaleString方法很有用,但我不知道从长远来看它们的可靠性如何。要获得 ISO 8601 格式的本地日期,与语言 en-CA 相关联的格式似乎适合:
new Date().toLocaleDateString('en-CA')
如果您想以 YYYY-MM-DD 格式获取上海当前日期和明天的时间戳,请考虑:
let d = new Date();
let today = d.toLocaleDateString('en-CA', {timeZone:'Asia/Shanghai'});
d.setDate(d.getDate() + 1);
let tomorrow = d.toLocaleDateString('en-CA', {timeZone:'Asia/Shanghai'});
console.log(`Today : ${today}\nTomorrow: ${tomorrow}`);
正在尝试将开始日期限制为明天(本地日期)。有人可以告诉为什么下面的代码不起作用:
<form method="POST">
<div>
<label for="s2">pickup_date</label>
<input type = 'date' name='pickup_date' required>
<br /><br />
</div>
</form>
<script>
var time = new Date();
var localTimeStr = time.toLocaleString('en-US', { timeZone: 'Asia/Shanghai' });
today = new Date(localTimeStr)
tomorrow = new Date(today.setDate(today.getDate() + 1)).toISOString().split('T')[0];
t = String(tomorrow)
document.getElementsByName("pickup_date")[0].setAttribute('min', t);
</script>
下面代码的输出是 2022-01-18:
var time = new Date();
var localTimeStr = time.toLocaleString('en-US', { timeZone: 'Asia/Shanghai' });
today = new Date(localTimeStr)
tomorrow = new Date(today.setDate(today.getDate() + 1)).toISOString().split('T')[0];
t = tomorrow.split('-')[0]+'-'+tomorrow.split('-')[1]+'-'+tomorrow.split('-')[2]
console.log(t)
但是,表格中的日历开始日期仍然是 2022-01-17。但是,当我手动设置
document.getElementsByName("pickup_date")[0].setAttribute('min', '2022-01-18');
日历正确地从 2022-01-18 开始。为什么!
OP 中有:
var time = new Date();
var localTimeStr = time.toLocaleString('en-US', { timeZone: 'Asia/Shanghai' });
today = new Date(localTimeStr)
这将 return 带有上海日期和时间的时间戳。
tomorrow = new Date(today.setDate(today.getDate() + 1)).toISOString().split('T')[0];
这将首先使用内置解析器将分配给 today 的字符串解析为主机系统的“本地”,ECMA-262 不需要这样做(参见 Why does Date.parse give incorrect results?)。
然后它将 return 一个 ISO 8601 格式的字符串,用于等效的 UTC 日期和时间。如果主机系统的偏移量为正,则根据时间戳中的时间,日期将是同一天或前一天。同样,对于具有负偏移量的主机,日期可能是同一天或第二天,具体取决于字符串中的时间和主机系统的偏移量。
关于格式化日期的问题很多,各种toLocaleString方法很有用,但我不知道从长远来看它们的可靠性如何。要获得 ISO 8601 格式的本地日期,与语言 en-CA 相关联的格式似乎适合:
new Date().toLocaleDateString('en-CA')
如果您想以 YYYY-MM-DD 格式获取上海当前日期和明天的时间戳,请考虑:
let d = new Date();
let today = d.toLocaleDateString('en-CA', {timeZone:'Asia/Shanghai'});
d.setDate(d.getDate() + 1);
let tomorrow = d.toLocaleDateString('en-CA', {timeZone:'Asia/Shanghai'});
console.log(`Today : ${today}\nTomorrow: ${tomorrow}`);