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}`);