試圖將開始日期限制為明天(本地日期)。有人可以告訴為什么下面的代碼不起作用:
<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 開始。為什么!
uj5u.com熱心網友回復:
在OP中有:
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];
這將首先使用內置決議器將分配給今天的字串決議為主機系統的“本地”,ECMA-262 不需要這樣做(請參閱為什么 Date.parse 給出不正確的結果?)。
然后它將回傳等效 UTC 日期和時間的 ISO 8601 格式字串。如果主機系統的偏移量為正,則根據時間戳中的時間,日期將是同一天或前一天。同樣,對于具有負偏移量的主機,日期可能是同一天或次日,具體取決于字串中的時間和主機系統的偏移量。
關于格式化日期有很多問題,各種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}`);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/414179.html
標籤:
