Несоответствие в JSON.stringify даты оценивает в различных браузерах

editor.putString("text", mSaved.getText().toString());

Здесь mSaved может быть любым TextView или EditText, из которого мы можем извлечь строку. вы можете просто указать строку. Здесь текст будет ключом, который удерживает значение, полученное из mSaved (TextView или EditText).

SharedPreferences prefs = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);

Также нет необходимости сохранять файл предпочтений с использованием имени пакета i.e., «com.example.app». Вы можете указать свое собственное имя. Надеюсь, это поможет!

17
задан Tauren 7 February 2010 в 12:04
поделиться

4 ответа

Я заставил это работать, добавив следующий javascript:

// Added to make dates format to ISO8601
Date.prototype.toJSON = function (key) {
    function f(n) {
        // Format integers to have at least two digits.
        return n < 10 ? '0' + n : n;
    }

    return this.getUTCFullYear()   + '-' +
         f(this.getUTCMonth() + 1) + '-' +
         f(this.getUTCDate())      + 'T' +
         f(this.getUTCHours())     + ':' +
         f(this.getUTCMinutes())   + ':' +
         f(this.getUTCSeconds())   + '.' +
         f(this.getUTCMilliseconds())   + 'Z';
};

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

9
ответ дан 30 November 2019 в 14:12
поделиться

Вы также можете настроить json2.js так, чтобы он всегда использовал собственный Date.prototype.toJSON вместо возможного нативного. Здесь я раскомментировал две строки, и он работает правильно:

// if (typeof Date.prototype.toJSON !== 'function') {

    Date.prototype.toJSON = function (key) {

        return isFinite(this.valueOf()) ?
               this.getUTCFullYear()   + '-' +
             f(this.getUTCMonth() + 1) + '-' +
             f(this.getUTCDate())      + 'T' +
             f(this.getUTCHours())     + ':' +
             f(this.getUTCMinutes())   + ':' +
             f(this.getUTCSeconds())   + 'Z' : null;
    };

    String.prototype.toJSON =
    Number.prototype.toJSON =
    Boolean.prototype.toJSON = function (key) {
        return this.valueOf();
    };
// }
4
ответ дан 30 November 2019 в 14:12
поделиться

// Вы можете подумать об усилении сервера, чтобы распознать любой допустимый формат времени ISO 8601:

'2010-02-08T03: 37: 34.327Z'

'2010-02-08T03: 38: 06Z'

'2010-02-08T03: 38 + 01: 00'

'2010-02-08T03: 34: 18-05: 00'

'2010-02-08T03: 34Z'

'2010-02-08'

Это метод преобразования любой строки iso в объект даты javascript. Его можно использовать на сервере с небольшой перевод:

Date.from_iso= function(s){
    var D, M= [], hm, min= 0, d2,
    Rx=  /([\d:]+)(\.\d+)?(Z|(([+\-])(\d\d):(\d\d))?)?$/;
    D= s.substring(0, 10).split('-');
    if(s.length> 11){
        M= s.substring(11).match(Rx) || [];
        if(M[1]) D= D.concat(M[1].split(':'));
        if(M[2]) D.push(Math.round(M[2]*1000));// msec
    }
    for(var i= 0, L= D.length; i<L; i++){
        D[i]= parseInt(D[i], 10);
    }
    D[1]-= 1;
    while(D.length< 6) D.push(0);
    if(M[4]){
        min= parseInt(M[6])*60+ parseInt(M[7], 10);// timezone not UTC
        if(M[5]== '+') min*= -1;
    }
    try{
        d2= Date.fromUTCArray(D);
        if(min) d2.setUTCMinutes(d2.getUTCMinutes()+ min);
    }
    catch(er){
        // bad input
    }
    return d2;
}
Date.fromUTCArray= function(A){
    var D= new Date;
    while(A.length < 7) A.push(0);
    var T= A.splice(3, A.length);
    D.setUTCFullYear.apply(D, A);
    D.setUTCHours.apply(D, T);
    return D;
}
3
ответ дан 30 November 2019 в 14:12
поделиться
Другие вопросы по тегам:

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