Присвоение переменной Date другой будет скопировать ссылку на ТОЧНОЕ значение. Это означает, что изменение одного изменит другое. Как я могу на самом деле клонировать или копировать значение?Как клонировать объект Date в JavaScript
ответ
Используйте getTime()
метода, Date объекта, который возвращает количество миллисекунд с 1 января 1970 00:00:00 (epoch time):
var date = new Date();
var copiedDate = new Date(date.getTime());
В Safari 4, вы также можете написать:
var date = new Date();
var copiedDate = new Date(date);
... но я не уверен, работает ли это в других браузерах. (Кажется, это работает в IE8).
Это самый чистый подход
var dat = new Date()
var copyOf = new Date(dat.valueOf())
Метод valueOf() для объектов «Дата» дает тот же результат, что и его метод getTime() (число миллисекунд с момента времени). –
@Steve: true, но getTime() может «выглядеть», например, он возвращает время и не включает дату, а значит, мою ссылку на «cleanest». Откровенно, тип Date в Javascript - это немного зоны бедствия, он никогда не должен был изменяться в первую очередь. – AnthonyWJones
@ AnthonyWJones: Right , Я понимаю, что вы имеете в виду. –
вы можете использовать универсальный метод:
Дата
var new_date = $.extend(new Date(), current_date);
Объект
var new_object = $.extend({}, current_object);
и другие ...
Что вы подразумеваете под универсальным методом? Извините, я просто не понимаю. – Matthias
JQuery $ .extend() копирует свойства из одного объекта в другой, поэтому он работает как своего рода родовая процедура мелкой копии. По крайней мере, я думаю, это то, что они имели в виду. –
Этот метод полезен. – dexiang
Упрощенная версия:
Date.prototype.clone = function() {
return new Date(this.getTime());
}
Не будьте беспомощны со встроенными объектами – Pawel
Не вмешивайся в объекты, которых ты не обладаешь. Вы должны сделать новую копию и назвать ее SuperDate или что-то еще, с учетом вашего объема. Многое, что сложно проверить на наличие ошибок, вызвано неожиданным изменением функциональности объекта. –
Это будет работать, но для удобства обслуживания этот подход будет рассматриваться как запах кода. Я написал подход, который я обычно использую в своем кодировании: https://actuts.wordpress.com/2017/01/10/cloning-javascript-date-instances/ –
я узнал, что это просто assignmnent также работает:
dateOriginal = new Date();
cloneDate = new Date(dateOriginal);
Но я не знаю, как «безопасный " это. Успешно прошел испытания в IE7 и Chrome 19.
Не используйте 'new Date (date)', используйте 'new Date (date.getTime()' или 'new Date (date.valueOf)', потому что первый способ может привести к различиям между датами, по крайней мере, в Firefox и IE (не Chrome). Например, используя 'toISOString()' в обеих датах в Firefox генерирует '" 2015-04-21T04: 56: 42.000Z "и' "2015-04-21T04: 56: 42.337Z" – crudh
var orig = new Date();
var copy = new Date(+orig);
Мне нравится это решение. – A1rPun
Очень точный и чистый :) – robinmitra
За исключением того, что вам нужно будет объяснить, что эта магия '+' делает для кого-либо, кроме экспертов JS. –
Если вы собираетесь добавить клон Date прототипа, то вы можете сделать это без перечислимы ...
Date.prototype = Object.defineProperty(Date.prototype, "clone", {
value: function (fromDate) { return new Date(fromDate.valueOf()); }
});
- 1. Точно клонировать объект в javascript
- 2. как клонировать объект запроса мангуста в javascript
- 3. Как клонировать ошибку javascript в стандартный объект
- 4. Как клонировать объект js?
- 5. Date() Объект JavaScript
- 6. Клонировать объект javascript и обновлять значения
- 7. Как инициализировать объект Date в JavaScript
- 8. Как разобрать "/ Date (1459934700000) /" в объект Date JavaScript?
- 9. Как клонировать объект словаря?
- 10. как клонировать объект java
- 11. Как клонировать объект?
- 12. Как клонировать объект JAXB
- 13. Как клонировать объект HttpServletResponse
- 14. Как клонировать объект в Parse.com
- 15. Как клонировать объект в Java
- 16. Как клонировать объект в Flex?
- 17. как клонировать объект в android?
- 18. Как «клонировать» объект в объект подкласса?
- 19. Добавить время в объект Date в javascript
- 20. parse string date to date объект в javascript
- 21. Включает ли объект JavaScript Date Date в конце года?
- 22. Добавление часов в объект Date Javascript?
- 23. Почему JavaScript-объект Date недействителен в Firefox?
- 24. машинопись - клонировать объект
- 25. Клонировать часть объекта javascript
- 26. Javascript, как клонировать
- 27. Как клонировать blob в javascript
- 28. Javascript Добавить объект в Date через прототип
- 29. Как клонировать неэриализуемый объект? (C#)
- 30. Как клонировать прикрепленный объект EclipseLink
Иногда люди также используют Сериализация JSON и десериализация, но это лучше и намного быстрее. +1 от меня. –
JSON для этого фрагмента? Похоже, эти люди должны понять свои основы ... Как ошибочный jQuery для JavaScript DOM. – Boldewyn
Другим способом написания этого приятного решения было бы расширить прототип Date: 'Date.prototype.clone = function() {return new Date (this.getTime()); }; ' Что вы могли бы использовать как' copiedDate = date.clone(); ' – Ryan