новая дата () имеет разные выходные данные в app.js и ejs

#javascript #html #node.js #express #ejs

#javascript #HTML #node.js #выразить #ejs

Вопрос:

 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 (стандартное время Сингапура)

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

Комментарии:

1. Когда я пытаюсь организовать мероприятие в 9 утра по восточному времени, оно сохраняется в UTC как 01: **: ** . Он должен сохранить его как 3: 30 UTC, поскольку я упорядочиваю его с помощью средства выбора даты в моем браузере.

2. Я попытался изменить серверное время на IST . И когда я проверяю дату с помощью терминала, она показывает мне правильное время в IST. Но в фоновом режиме он сохраняет его как Сингапурское местное время.

3. Кто-нибудь имеет представление о том, почему терминал выдает IST, а сервер сохраняет данные в UTC, вычитая из него 8 часов?

Ответ №1:

 new Date().toLocaleString()  

Нажмите здесь, чтобы вывести, есть ли

или

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

Выборка из серверных и интерфейсных ejs nodejs с использованием функции даты 19.03.2019, 10:58:31

Комментарии:

1. getFullYear() Получает год в виде четырехзначного числа (гггг) getMonth() Получает месяц в виде числа (0-11) getDate() Получает день в виде числа (1-31) getHours() Получает час (0-23) getMinutes() Получает минуту (0-59) getSeconds() Получает секунду (0-59) getMilliseconds () Получает миллисекунду (0-999) getTime() Получает время (миллисекунды с 1 января 1970 года) getDay() Получает день недели в виде числовой (0-6) даты.now() Получает время. ECMAScript 5.

2. если вы хотите, чтобы на стороне клиента отображались те же дата и время, тогда вы можете передать данные со стороны сервера на сторону клиента шаг 1: app.js res.render(‘pages/home’,{«serverdate»:новая дата().toLocaleString()}); шаг 2: файл ejs <%= serverdate %>

3. Будем иметь это в виду и попытаемся использовать .tolocalString .

Ответ №2:

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

Комментарии:

1. Согласно документам, EJS — это простой язык шаблонов, который позволяет вам генерировать HTML-разметку с помощью простого JavaScript. Я думаю, что он выполняет файл на сервере и отправляет простой HTML клиенту. Я прав?

2. Вы правы @VikramRay, просто выведите вашу общую переменную, переданную с сервера на клиентский сайт с помощью <%= d %>, и ваш формат будет согласованным.

3. Понял. Спасибо.

Ответ №3:

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

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

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

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

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

Ответ №4:

Они оба являются не двумя разными датами, а одной и той же датой в разных часовых поясах.

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

new Date() вызывает конструктор и возвращает экземпляр 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)