Добавить 5.30 часов с выбранным временем даты в угловых js в пределах угловой стороны атрибутов даты js [дубликат]

Pure JS. Моя задача состояла в том, что если образ «bl-once.png» пуст -> вставьте первый (который не имеет статуса 404) из списка массивов (в текущем каталоге):

<img src="http://localhost:63342/GetImage/bl-once.png" width="200" onerror="replaceEmptyImage.insertImg(this)">

Возможно, его нужно улучшить, но:

var srcToInsertArr = ['empty1.png', 'empty2.png', 'needed.png', 'notActual.png']; // try to insert one by one img from this array
    var path;
    var imgNotFounded = true; // to mark when success

    var replaceEmptyImage = {
        insertImg: function (elem) {

            if (srcToInsertArr.length == 0) { // if there are no more src to try return
                return "no-image.png";
            }
            if(!/undefined/.test(elem.src)) { // remember path
                path = elem.src.split("/").slice(0, -1).join("/"); // "http://localhost:63342/GetImage"
            }
            var url = path + "/" + srcToInsertArr[0];

            srcToInsertArr.splice(0, 1); // tried 1 src

            
                if(imgNotFounded){ // while not success
                    replaceEmptyImage.getImg(url, path, elem); // CALL GET IMAGE
                }
            

        },
        getImg: function (src, path, elem) { // GET IMAGE

            if (src && path && elem) { // src = "http://localhost:63342/GetImage/needed.png"
                
                var pathArr = src.split("/"); // ["http:", "", "localhost:63342", "GetImage", "needed.png"]
                var name = pathArr[pathArr.length - 1]; // "needed.png"

                xhr = new XMLHttpRequest();
                xhr.open('GET', src, true);
                xhr.send();

                xhr.onreadystatechange = function () {

                    if (xhr.status == 200) {
                        elem.src = src; // insert correct src
                        imgNotFounded = false; // mark success
                    }
                    else {
                        console.log(name + " doesn't exist!");
                        elem.onerror();
                    }

                }
            }
        }

    };

Итак, это будет вставьте правильный 'needed.png' в мой src или 'no-image.png' из текущего каталога.

10
задан brushleaf 12 August 2013 в 08:24
поделиться

4 ответа

Здесь я думаю, что это то, что вы ищете: Как игнорировать часовой пояс пользователя и заставить Date () использовать определенный часовой пояс

Мне кажется, что вы может сделать что-то вроде этого:

var date = new Date("6-25-2012 12:00:00 PM");

var offset = date.getTimezoneOffset(); // returns offset from GMT in minutes

// to convert the minutes to milliseconds
offset *= 60000;

// the js primitive value is unix time in milliseconds so this retrieves the 
// unix time in milliseconds and adds our offset.
// Now we can put this all back in a date object
date = new Date(date.valueOf() + offset);

// to get back your sting you can maybe now do something like this:
var dateString = date.toLocaleString().replace(/\//g,'-').replace(',','');
2
ответ дан Community 18 August 2018 в 14:37
поделиться

Я использую фильтр перед отправкой даты на сервер vm.dateFormat = 'yyyy-MM-dd'; dateToSendToServer = $ filter ('date') (dateFromTheJavaScript, vm.dateFormat);

0
ответ дан Hans Lindskog 18 August 2018 в 14:37
поделиться

Не следует полагаться на конструктор Date JavaScript для синтаксического анализа строки. Поведение и поддерживаемые форматы сильно различаются для каждого браузера и локали. Здесь являются только некоторыми поведения по умолчанию, если вы напрямую используете объект Date.

Если вы должны исходить из строки, попробуйте использовать стандартизованный формат, такой как ISO8601. Дата, указанная в этом формате, будет "2012-06-25T12:00:00". Самый простой способ работать с ними в JavaScript - это moment.js .

Кроме того, будьте осторожны с тем, что вы на самом деле имеете в виду. Прямо сейчас вы проходите локальную дату / время, сохраняя локальный / дата / время и возвращая локальную дату / время. Попутно идея «локального» может измениться.

Во многих случаях дата / время предназначено для представления точного момента времени во времени. Чтобы выполнить эту работу, вам необходимо преобразовать с локального времени, введенного в UTC на клиенте. Отправьте UTC на свой сервер и сохраните его. Позже, получите UTC и отправьте его обратно своему клиенту, обработайте его как UTC и переведите обратно в локальное время. Вы можете сделать все это легко с помощью момента. Js:

// I'll assume these are the inputs you have.  Adjust accordingly.
var dateString = "6-25-2012";
var timeString = "12:00:00 PM";

// Construct a moment in the default local time zone, using a specific format.
var m = moment(dateString + " " + timeString, "M-D-YYYY h:mm:ss A");

// Get the value in UTC as an ISO8601 formatted string
var utc = m.toISOString(); // output: "2012-06-25T19:00:00.000Z"

На сервере в .Net:

var dt = DateTime.Parse("2012-06-25T19:00:00.000Z",   // from the input variable
                        CultureInfo.InvariantCulture, // recommended for ISO
                        DateTimeStyles.RoundtripKind) // honor the Z for UTC kind

Храните его в базе данных. Позже верните его и отправьте обратно:

// when you pull it from your database, set it to UTC kind
var dt = DateTime.SpecifyKind((DateTime)reader["yourfield"], DateTimeKind.Utc);

// send it back in ISO format:
var s = dt.ToString("o"); // "o" is the ISO8601 "round-trip" pattern.

Передайте его обратно в javascript в момент. Js:

// construct a moment:
var m = moment("2012-06-25T19:00:00.000Z"); // use the value from the server

// display it in this user's local time zone, in whatever format you want
var s = m.format("LLL");   // "June 25 2012 12:00 PM"

// or if you need a Date object
var dt = m.toDate();

См. - это было легко, и вы не нужно во что бы то ни стало придумать часовые пояса.

18
ответ дан Matt Johnson 18 August 2018 в 14:37
поделиться
  • 1
    Чтобы сохранить эту строку ISO в базе данных, разве столбец не должен быть полем datetimeoffset (по сравнению с полем SQL datetime)? Предполагая, конечно, мы не храним только строку. Или предпочтительнее просто сохранить строку? – brushleaf 13 August 2013 в 01:45
  • 2
    Нет, не храните строку. Если вы сохраняете UTC, вы можете использовать либо datetime, либо datetime2. Для этого конкретного сценария вам не требуется datetimeoffset. Вы могли использовать его, но вам, вероятно, не нужно, если вы не заботитесь о локальном часовом поясе пользователей. См. Мой ответ в DateTime vs DateTimeOffset . – Matt Johnson 13 August 2013 в 04:04
  • 3
    Чтобы добавить к моему предыдущему комментарию, многие люди действительно предпочитают использовать DateTimeOffset для UTC. Несмотря на то, что они знают, что смещение всегда равно нулю, отслеживание того, что в DateTimeOffset вместо DateTime является хорошим способом предотвратить ошибочное его интерпретирование. Единственным недостатком этого является то, что он будет сериализован с +00:00 вместо Z, но это часто бывает приемлемым. – Matt Johnson 23 February 2017 в 18:34

Убейте JSON.Stringify () ... и выполните:

x = (your_date);
x.setHours(x.getHours() - x.getTimezoneOffset() / 60);
0
ответ дан PSyLoCKe 18 August 2018 в 14:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: