new Date () имеют разные выходные данные в app.js и ejs - PullRequest
1 голос
/ 19 марта 2019
app.get("/test",function(req,res){
var d = new Date();
res.send(d);
});

Это дает вывод "2019-03-19T04: 50: 47.710Z", который является UTC, когда я захожу через mydomain / test

app.get("/testejs",function(req,res){
res.render("testejs");});

Мои тесты ниже-

<%= new Date() %>

Этот ejs при посещении через mydomain / testejs выдает -

Вт 19 марта 2019 12:55:52 GMT + 0800 (стандартное время Сингапура)

Как это возможно, что новый Date () дает мне два разных вывода из (app.js и testejs.ejs), но он выполняется на одном сервере?

Ответы [ 4 ]

0 голосов
/ 19 марта 2019

Они не две разные даты, а одна и та же дата в разных часовых поясах.

Причиной разного формата является то, как метод toString () записывается для объекта Date, а метод toString () -таким образом, чтобы вернуть дату в формате UTC, поэтому, когда вы отправляете ее в браузере, она вызывает toString для даты, так как все будет преобразовано в строку перед монтированием.

new Date () вызывает конструктор и возвращаетэкземпляр даты, который также будет иметь все свои методы, однако Date () - это функция, которая возвращает строковую дату.

См. примеры ниже

date = new Date('Tue Mar 19 2019 12:55:52 GMT+0800')

console.log(date)
console.log('toString-%s',date.toString())
console.log('toString-%s',''+date)
console.log('Tue Mar 19 2019 12:55:52 GMT+0800')
//Managing offsets
console.log(Date('Tue Mar 19 2019 12:55:52 GMT+0800'))
date.setTime(date.getTime() + (8-5.5)*60*1000 );
console.log(date)
0 голосов
/ 19 марта 2019

new Date () генерирует значение даты, которое представляет собой количество миллисекунд с базового времени, обычно 1 января 1970 года. Точное значение зависит от установки часов на сервере, где генерируется значение.

Это значение может отображаться различными способами.

В зависимости от настроек по умолчанию клиентской среды, чтобы я был в UTC или в местном [или каком-то другом] часовом поясе, и в различных форматах.

Обратите внимание, что 04:50 UTC и 12:55 GMT + 0800 с интервалом около 5 минут, но в разных часовых поясах. Если это было два теста, запустите 5 минут кроме того, это объяснило бы разницу.

Вместо использования метода toString () по умолчанию для отображения времени, используйте getTime (), чтобы увидеть, что такое необработанное число.

0 голосов
/ 19 марта 2019

Добрый день, Помните, что app.js работает на стороне сервера и ejs в браузере, формат даты браузера отличается от сервера.

0 голосов
/ 19 марта 2019

new Date().toLocaleString()

Кликните здесь Out out есть

OR

new Date(Date.now()).toLocaleString()

Sample Out Поместите backjnd и frontend ejs nodejs, используя функцию даты 19.03.2009, 10:58:31 AM

...