Как передать пользовательский вход из формы AngularJS в бэкэнд python? [Дубликат]

У вас будут обе таблицы TableA и TableB, так что оба объекта DataFrame имеют столбцы с уникальными значениями в своих соответствующих таблицах, но некоторые столбцы могут иметь значения, которые происходят одновременно (имеют одинаковые значения для строки ) в обеих таблицах.

Затем мы хотим объединить строки в TableA со строками в TableB, которые не соответствуют ни одному в TableA для столбца «Ключ». Концепция состоит в том, чтобы представить ее как сравнение двух серий переменной длины и комбинирования строк в одной серии sA с другими sB, если значения sB не соответствуют sA. Следующий код решает это упражнение:

import pandas as pd

TableA = pd.DataFrame([[2, 3, 4], [5, 6, 7], [8, 9, 10]])
TableB = pd.DataFrame([[1, 3, 4], [5, 7, 8], [9, 10, 0]])

removeTheseIndexes = []
keyColumnA = TableA.iloc[:,1] # your 'Key' column here
keyColumnB = TableB.iloc[:,1] # same

for i in range(0, len(keyColumnA)):
    firstValue = keyColumnA[i]
    for j in range(0, len(keyColumnB)):
        copycat = keyColumnB[j]
        if firstValue == copycat:
            removeTheseIndexes.append(j)

TableB.drop(removeTheseIndexes, inplace = True)
TableA = TableA.append(TableB)
TableA = TableA.reset_index(drop=True)

Обратите внимание, что это также влияет на данные TableB. Вы можете использовать inplace=False и повторно назначить его на newTable, затем TableA.append(newTable).

# Table A
   0  1   2
0  2  3   4
1  5  6   7
2  8  9  10

# Table B
   0   1  2
0  1   3  4
1  5   7  8
2  9  10  0

# Set 'Key' column = 1
# Run the script after the loop

# Table A
   0   1   2
0  2   3   4
1  5   6   7
2  8   9  10
3  5   7   8
4  9  10   0

# Table B
   0   1  2
1  5   7  8
2  9  10  0
430
задан BadPirate 19 October 2016 в 18:33
поделиться

22 ответа

В качестве альтернативы new Date().getTimezoneOffset() и moment().format('zz') вы также можете использовать :

var offset = moment.parseZone(Date.now()).utcOffset() / 60
console.log(offset);
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>

jstimezone также довольно неудовлетворительно и не поддерживается ( https://bitbucket.org/pellepim/jstimezonedetect/issues?status=new&status=open )

418
ответ дан Ruslan López 19 August 2018 в 01:32
поделиться
  • 1
    @abernier Является ли утверждение об ошибке getTimezoneOffset недействительным? Статья, о которой вы говорите, датирована июнем 2007 года и не содержит сведений о том, как функция является неточной. И на самом деле библиотека jsTimezoneDetect, которую вы указали, использует getTimezoneOffset. – Mike 15 November 2013 в 19:03
  • 2
    @abernier Это стандарт, поскольку ES 1, поэтому я уверен, что любая проблема реализации может быть исправлена ​​к настоящему времени, я имею в виду, что это 7-летняя статья. – LasagnaAndroid 30 May 2014 в 21:24
  • 3
    Все отлично с функцией Date.getTimezoneOffset (), однако для определения правильного имени часового пояса, основанного только на смещении, вам может понадобиться библиотека jsTimezoneDetect. – Vanger 11 August 2014 в 14:53
  • 4
    var hrs = -(new Date().getTimezoneOffset() / 60) , чтобы получить смещение в часах, обычно используемых – Edwin Daniels 1 May 2015 в 18:20
  • 5
    Кажется, он не учитывает летнее время – Shahdat 2 July 2015 в 16:37
431
ответ дан Ruslan López 30 October 2018 в 13:13
поделиться

Часовой пояс в часах -

var offset = new Date().getTimezoneOffset();
if(offset<0)
    console.log( "Your timezone is- GMT+" + (offset/-60));
else
    console.log( "Your timezone is- GMT-" + offset/60);

Если вы хотите быть точным, как вы упомянули в комментарии, тогда вы должны попробовать,

var offset = new Date().getTimezoneOffset();

if(offset<0)
{
    var extraZero = "";
    if(-offset%60<10)
      extraZero="0";

    console.log( "Your timezone is- GMT+" + Math.ceil(offset/-60)+":"+extraZero+(-offset%60));
}
else
{
    var extraZero = "";
    if(offset%60<10)
      extraZero="0";

    console.log( "Your timezone is- GMT-" + Math.floor(offset/60)+":"+extraZero+(offset%60));
}

3
ответ дан Abrar Jahin 19 August 2018 в 01:32
поделиться
  • 1
    Не работает для часовых поясов, когда это не полный час, как Венесуэла, где он возвращается GMT-4.5 – Mirko 27 March 2017 в 16:08
  • 2
    Да, именно так. 0,5 означает 0,5 * 30 мин. Я думаю, что вы получили это, потому что он дает 0,5? – Abrar Jahin 27 March 2017 в 17:23
  • 3
    да, поэтому GMT-4.5 не является допустимым часовым поясом, ему нужно немного дополнительного разбора, чтобы стать GMT-4: 30 – Mirko 27 March 2017 в 17:40
  • 4
    @Mirko теперь вторая часть ответа для вас – Abrar Jahin 27 March 2017 в 19:11

На new Date() вы можете получить смещение, чтобы получить имя часового пояса, которое вы можете сделать:

new Date().toString().replace(/(.*\((.*)\).*)/, '$2');

вы получаете значение между () в конец даты, то есть имя часового пояса.

1
ответ дан alamoot 19 August 2018 в 01:32
поделиться

Это очень хорошая работа для меня:

// Translation to offset in Unix Timestamp
let timeZoneOffset = ((new Date().getTimezoneOffset())/60)*3600;
-1
ответ дан Alexander 19 August 2018 в 01:32
поделиться

Вы можете использовать:

момент-часовой пояс

<script src="moment.js"></script>
<script src="moment-timezone-with-data.js"></script>

// retrieve timezone by name (i.e. "America/Chicago")
moment.tz.guess();

Определение часового пояса браузера довольно сложно, так как информации о браузере мало.

Moment Timezone использует Date.getTimezoneOffset() и Date.toString() в течение нескольких минут вокруг текущего года, чтобы собрать как можно больше информации о среде браузера. Затем он сравнивает эту информацию со всеми данными часового пояса и возвращает самое близкое соответствие. В случае связей возвращается часовой пояс с городом с наибольшей численностью населения.

console.log(moment.tz.guess()); // America/Chicago
204
ответ дан Alexis Wilke 19 August 2018 в 01:32
поделиться
  • 1
    Это единственный ответ для получения часового пояса, который может понадобиться некоторым пользователям, а не только смещению. Итак, как обновление в 2016-09, Intl работает с большинством современных браузеров, но не с Safari. Для этого браузера существует достаточно точный резерв javascript здесь - pellepim.bitbucket.org/jstz – user2085368 14 September 2016 в 22:24
  • 2
    Убедитесь, что теперь это работает в Safari. (С использованием версии 10.0) – BadPirate 19 October 2016 в 18:38
  • 3
    Это должен быть принятый ответ. Это единственный, который дает фактическое имя часового пояса , а не смещение. Помните, что временное смещение может быть получено от имени, противоположное - неверно. Из-за DST и других тонкостей несколько часовых поясов могут иметь одинаковое смещение только в определенные дни года. – Romain G 21 November 2016 в 15:34
  • 4
    Было бы неплохо, если бы это работало во всех современных браузерах. Однако IE11 и последние версии Firefox возвращаются не определенно для свойства timeZone. – Haprog 1 February 2017 в 08:44
  • 5
    Это должно быть отмечено как ответ - все кавычки получают смещение, а не часовой пояс. – Vlad 28 May 2017 в 23:32
  • 6
    Теперь я тестировал Chrome 58, Edge 40 и Firefox 53 - все будет работать. Он не работает с IE 11, я не тестировал Opera. – Suma 5 June 2017 в 09:20

Я искал только 3-строчную строку (например, «PDT») и попробовал ответ Маркеса, но ей пришлось немного подправить ее для поддержки кросс-браузера. К счастью, строка является последним потенциальным совпадением:)

Вот что я сделал, в CoffeeScript:

browserTimezone = ->
  userDate = new Date()
  zoneMatches = userDate.toString().match(/([A-Z][A-Z][A-Z])/g)
  userZone = zoneMatches[zoneMatches.length - 1]

Работает в IE8, IE9, Safari 9, Firefox 44 и Chrome 48 [/ д2]

-1
ответ дан ari gold 19 August 2018 в 01:32
поделиться
  • 1
    Существуют часовые пояса с четырьмя буквами - будьте осторожны: например, CEST (Центральное европейское летнее время) – jbrosi 1 April 2016 в 13:08
function getLocalTimeZone() {
    var dd = new Date();
    var ddStr = dd.toString();
    var ddArr = ddStr.split(' ');
    var tmznSTr = ddArr[5];
    tmznSTr = tmznSTr.substring(3, tmznSTr.length);
    return tmznSTr;
}

Пример: Чт 21 июня 2018 18:12:50 GMT + 0530 (стандартное время в Индии)

O / P: +0530

2
ответ дан Chandrakanth Gowda 19 August 2018 в 01:32
поделиться

Уже ответили, как получить смещение в минутах как целое число, но в случае, если кто-то хочет, чтобы локальное смещение по часовой стрелке как строка, например. "+1130":

function pad(number, length){
    var str = "" + number
    while (str.length < length) {
        str = '0'+str
    }
    return str
}

var offset = new Date().getTimezoneOffset()
offset = ((offset<0? '+':'-')+ // Note the reversed sign!
          pad(parseInt(Math.abs(offset/60)), 2)+
          pad(Math.abs(offset%60), 2))
66
ответ дан cryo 19 August 2018 в 01:32
поделиться
  • 1
    Вам нужно заменить 1st padding на pad(parseInt(Math.abs(offset/60)), 2), чтобы все было правильно ... иначе вы могли бы получить +5.530, как в моем случае ... im не уверен, что математический пол и т. Д. Будет лучше здесь или нет ... но это по крайней мере дает мне +0530, как и ожидалось – Abhinav Singh 30 June 2012 в 17:16
  • 2
    Именно то, что я искал. Благодаря ! – codesnooker 19 December 2013 в 15:35
  • 3
    это даст правильный результат: this.pad (Math.floor ((Math.abs (offset / 60))), 2) – Vivek 27 April 2017 в 14:22
  • 4
    Вместо использования вашей функции пэда мне легче сделать это: offset = (offset & lt; 0 & quot; + & quot;: & quot; - & quot;) + ("0000" + parseInt ((Math.abs (offset / 60)))). ломтик (-4) – flurbius 5 October 2017 в 06:16

Вы просто хотите включить moment.js и jstz.js

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.6/jstz.min.js"></script>

, после чего

<script>
$(function(){
 var currentTimezone = jstz.determine();
 var timezone = currentTimezone.name();
 alert(timezone);
});

</script>
-1
ответ дан Dayachand Patel 19 August 2018 в 01:32
поделиться

try getTimezoneOffset() объекта Date:

var curdate = new Date()
var offset = curdate.getTimezoneOffset()

Этот метод возвращает смещение часового пояса в минутах, что является разницей между GMT и местным временем в минутах.

12
ответ дан jchavannes 19 August 2018 в 01:32
поделиться

Если вам нужно только аббревиатура часового пояса «MST» или «EST»:

function getTimeZone(){
    var now = new Date().toString();
    var timeZone = now.replace(/.*[(](.*)[)].*/,'$1');//extracts the content between parenthesis
    return timeZone;
}
3
ответ дан JohnP2 19 August 2018 в 01:32
поделиться

С moment.js :

moment().format('zz');
6
ответ дан kolypto 19 August 2018 в 01:32
поделиться

Используйте это, чтобы преобразовать OffSet в положительное:

var offset = new Date().getTimezoneOffset();
console.log(offset);
this.timeOffSet = offset + (-2*offset);
console.log(this.timeOffSet);
0
ответ дан Kumal Pereira 19 August 2018 в 01:32
поделиться

Я понимаю, что этот ответ немного не соответствует теме, но я думаю, что многие из нас, которые ищут ответ, также хотели отформатировать часовой пояс для отображения и, возможно, получить аббревиатуру зоны. Итак, вот оно ...

Если вы хотите, чтобы часовой пояс клиента был хорошо отформатирован, вы можете положиться на метод JavaScript Date.toString и делать:

var split = new Date().toString().split(" ");
var timeZoneFormatted = split[split.length - 2] + " " + split[split.length - 1];

Это даст вам " GMT-0400 (EST) ", например, включая минуты времени, когда это применимо.

В качестве альтернативы, с регулярным выражением вы можете извлечь любую желаемую часть:

Для «GMT-0400 (EDT)»:

new Date().toString().match(/([A-Z]+[\+-][0-9]+.*)/)[1]

Для «GMT-0400 ":

new Date().toString().match(/([A-Z]+[\+-][0-9]+)/)[1]

Для просто« EDT »:

new Date().toString().match(/\(([A-Za-z\s].*)\)/)[1]

Только для« -0400 »:

new Date().toString().match(/([-\+][0-9]+)\s/)[1]

Ссылка Date.toString: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toString

107
ответ дан Marquez 19 August 2018 в 01:32
поделиться
  • 1
    Сбой с Chrome, поскольку он добавляет имя часового пояса. Не используйте split.length, но константу вместо split[4] + " " + split[5]?! – Christophe Roussy 22 October 2013 в 10:09
  • 2
    Это также не работает (неожиданно, неожиданно) IE. Я просто сделал консольный дамп объекта split Date. Это то же самое в Chrome, Firefox и Safari, но отличается от IE. Таким образом, вы не можете рассчитывать на постоянные индексы. Mon Dec 02 2013 10:22:50 GMT-0500 (EST): Chrome, FF, Safari; Пн Дек 2 10:22:50 EST 2013: IE10 – adimauro 2 December 2013 в 17:32
  • 3
    @adimauro .. работает в IE11 сейчас;) – felickz 18 March 2014 в 16:27
  • 4
    Благодарю вас! Я прыгал через обручи, пытаясь отобразить часовой пояс браузера ..... new Date (). ToString (). Match (/ ([AZ] + [\ + -] [0-9] +. *) /) [ 1] было именно то, что мне нужно! – KiwiSunGoddess 7 May 2015 в 21:50
  • 5
    На самом деле не очень хорошая идея, что фактическое представление времени JS после того, как вы new Date().toString() полностью зависит от ваших настроек локали. Ожидание результатов других клиентов, похожих на ваши, - очень плохая идея. – Octopus 12 October 2017 в 21:22

Я написал функцию в моем проекте, которая возвращает часовой пояс в формате hh:mm. Я надеюсь, что это может кому-то помочь:

function getTimeZone() {
    var offset = new Date().getTimezoneOffset(), o = Math.abs(offset);
    return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2);
}

// Outputs: +5:00

function getTimeZone() {
  var offset = new Date().getTimezoneOffset(), o = Math.abs(offset);
  return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2);
}


// See output
document.write(getTimeZone());

Рабочий скрипт

30
ответ дан Mr_Green 19 August 2018 в 01:32
поделиться

См. этот результирующий оператор был противоположным часовому поясу. Используйте некоторую математическую функцию, затем проверяйте число меньше или больше.

См. Документ MDN

var a = new Date().getTimezoneOffset();

var res = -Math.round(a/60)+':'+-(a%60);
res = res < 0 ?res : '+'+res;

console.log(res)

2
ответ дан prasanth 19 August 2018 в 01:32
поделиться

Это выполнит задание.


var time = new Date(),
timestamp = Date(1000 + time.getTime());
console.log(timestamp);

Thu May 25 2017 21:35:14 GMT+0300 (IDT)

undefined

-1
ответ дан SysMurff 19 August 2018 в 01:32
поделиться

Это значение с компьютера пользователя, и его можно изменить в любое время, поэтому я думаю, что это не имеет значения, я просто хочу получить приблизительное значение и затем преобразовать его в GMT на моем сервере.

Например, я из Тайваня, и он возвращает «+8» для меня.

Рабочий пример

JS

function timezone() {
    var offset = new Date().getTimezoneOffset();
    var minutes = Math.abs(offset);
    var hours = Math.floor(minutes / 60);
    var prefix = offset < 0 ? "+" : "-";
    return prefix+hours;
}


$('#result').html(timezone());

HTML

<div id="result"></div>

Результат

+8
2
ответ дан Terry Lin 19 August 2018 в 01:32
поделиться

вы можете просто попробовать это. он вернет вам текущее машинное время

var _d = new Date(), t = 0, d = new Date(t*1000 + _d.getTime())

-1
ответ дан user8066707 19 August 2018 в 01:32
поделиться

JavaScript:

var d = new Date();
var n = d.getTimezoneOffset();
var timezone = n / -60;
console.log(timezone);

8
ответ дан زياد 19 August 2018 в 01:32
поделиться
231
ответ дан Alexis Wilke 30 October 2018 в 13:13
поделиться
Другие вопросы по тегам:

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